%!PS (but not EPSF; comments have been disabled)
%DVIPSCommandLine: dvips -D600 -ta4 -o thesis-ch2.ps thesis-ch2.dvi
%DVIPSParameters: dpi=600, compressed, comments removed
%DVIPSSource:  TeX output 1995.09.19:1602
/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72
mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1}
ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div
hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul
TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if}
forall round exch round exch]setmatrix}N /@landscape{/isls true N}B
/@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B
/FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{
/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N
string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N
end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{
/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]
N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup
length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{
128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub
get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data
dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N
/rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup
/base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx
0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff
setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff
.1 sub]/id ch-image N /rw ch-width 7 add 8 idiv string N /rc 0 N /gp 0 N
/cp 0 N{rc 0 ne{rc 1 sub /rc X rw}{G}ifelse}imagemask restore}B /G{{id
gp get /gp gp 1 add N dup 18 mod S 18 idiv pl S get exec}loop}B /adv{cp
add /cp X}B /chg{rw cp id gp 4 index getinterval putinterval dup gp add
/gp X adv}B /nd{/cp 0 N rw exit}B /lsh{rw cp 2 copy get dup 0 eq{pop 1}{
dup 255 eq{pop 254}{dup dup add 255 and S 1 and or}ifelse}ifelse put 1
adv}B /rsh{rw cp 2 copy get dup 0 eq{pop 128}{dup 255 eq{pop 127}{dup 2
idiv S 128 and or}ifelse}ifelse put 1 adv}B /clr{rw cp 2 index string
putinterval adv}B /set{rw cp fillstr 0 4 index getinterval putinterval
adv}B /fillstr 18 string 0 1 17{2 copy 255 put pop}for N /pl[{adv 1 chg}
{adv 1 chg nd}{1 add chg}{1 add chg nd}{adv lsh}{adv lsh nd}{adv rsh}{
adv rsh nd}{1 add adv}{/rc X nd}{1 add set}{1 add clr}{adv 2 chg}{adv 2
chg nd}{pop nd}]dup{bind pop}forall N /D{/cc X dup type /stringtype ne{]
}if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup
length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{
cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin
0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul
add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore userdict
/eop-hook known{eop-hook}if showpage}N /@start{userdict /start-hook
known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X
/IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for
65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0
0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V
{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7
getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false}
ifelse}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false
RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1
false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform
round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg
rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail
{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M}
B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{
4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{
p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p
a}B /bos{/SS save N}B /eos{SS restore}B end
TeXDict begin /SDict 200 dict N SDict begin /@SpecialDefaults{/hs 612 N
/vs 792 N /ho 0 N /vo 0 N /hsc 1 N /vsc 1 N /ang 0 N /CLIP 0 N /rwiSeen
false N /rhiSeen false N /letter{}N /note{}N /a4{}N /legal{}N}B
/@scaleunit 100 N /@hscale{@scaleunit div /hsc X}B /@vscale{@scaleunit
div /vsc X}B /@hsize{/hs X /CLIP 1 N}B /@vsize{/vs X /CLIP 1 N}B /@clip{
/CLIP 2 N}B /@hoffset{/ho X}B /@voffset{/vo X}B /@angle{/ang X}B /@rwi{
10 div /rwi X /rwiSeen true N}B /@rhi{10 div /rhi X /rhiSeen true N}B
/@llx{/llx X}B /@lly{/lly X}B /@urx{/urx X}B /@ury{/ury X}B /magscale
true def end /@MacSetUp{userdict /md known{userdict /md get type
/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup
length 20 add dict copy def}if end md begin /letter{}N /note{}N /legal{}
N /od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath
clippath mark{transform{itransform moveto}}{transform{itransform lineto}
}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{
itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{
closepath}}pathforall newpath counttomark array astore /gc xdf pop ct 39
0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}N
/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1
scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get
ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip
not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0
TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{noflips{TR
pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1
-1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg
TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg
sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr
0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add
2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N /cp
{pop pop showpage pm restore}N end}if}if}N /normalscale{Resolution 72
div VResolution 72 div neg scale magscale{DVImag dup scale}if 0 setgray}
N /psfts{S 65781.76 div N}N /startTexFig{/psf$SavedState save N userdict
maxlength dict begin /magscale true def normalscale currentpoint TR
/psf$ury psfts /psf$urx psfts /psf$lly psfts /psf$llx psfts /psf$y psfts
/psf$x psfts currentpoint /psf$cy X /psf$cx X /psf$sx psf$x psf$urx
psf$llx sub div N /psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy
scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR
/showpage{}N /erasepage{}N /copypage{}N /p 3 def @MacSetUp}N /doclip{
psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2
roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath
moveto}N /endTexFig{end psf$SavedState restore}N /@beginspecial{SDict
begin /SpecialSave save N gsave normalscale currentpoint TR
@SpecialDefaults count /ocount X /dcount countdictstack N}N /@setspecial
{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto
closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx
sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR
}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse
CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury
lineto closepath clip}if /showpage{}N /erasepage{}N /copypage{}N newpath
}N /@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{
end}repeat grestore SpecialSave restore end}N /@defspecial{SDict begin}
N /@fedspecial{end}B /li{lineto}B /rl{rlineto}B /rc{rcurveto}B /np{
/SaveX currentpoint /SaveY X N 1 setlinecap newpath}N /st{stroke SaveX
SaveY moveto}N /fil{fill SaveX SaveY moveto}N /ellipse{/endangle X
/startangle X /yrad X /xrad X /savematrix matrix currentmatrix N TR xrad
yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end
TeXDict begin 39158280 55380996 1000 600 600 (thesis-ch2.dvi)
@start /Fa 2 108 df<1338137CA2137813701300A7EA0780EA1FC0EA38E01230EA60F0
EAC1E0A3EA03C0A3EA0780A2EA0F0013041306EA1E0CA21318121CEA1E70EA0FE0EA0780
0F237DA116>105 D<13F8EA0FF0A21200A2485AA4485AA43807801E147FEB81C3EB8387
380F060F495A1318EB700E4848C7FCA213FCEA1E7EEA3C0F80EB0781158039780F0300A2
1402EB070600F0138CEB03F8386000F019247CA221>107 D E /Fb
14 120 df<903807FFC0013F13F848B6FC48812607FE037F260FF8007F6DEB3FF0486C80
6F7EA36F7EA26C5A6C5AEA01E0C8FC153F91B5FC130F137F3901FFFE0F4813E0000F1380
381FFE00485A5B485A12FF5BA4151F7F007F143F6D90387BFF806C6C01FB13FE391FFF07
F36CEBFFE100031480C6EC003FD91FF890C7FC2F2B7DA933>97 D<13FFB5FCA512077EAF
EDFFE0020713FC021FEBFF80027F80DAFF8113F09139FC003FF802F06D7E4A6D7E4A1307
4A80701380A218C082A318E0AA18C0A25E1880A218005E6E5C6E495A6E495A02FCEB7FF0
903AFCFF01FFE0496CB55AD9F01F91C7FCD9E00713FCC7000113C033407DBE3A>I<EE07
F8ED07FFA5ED003F161FAFEC7FF0903807FFFE011FEBFF9F017F14DF9039FFF01FFF48EB
C00348EB00014848EB007F485A001F153F5B123FA2127F5BA212FFAA127FA37F123FA26C
6C147F120F6D14FF6C6C01037F6C6D48EBFFE06CEBF03F6C6CB512BF6D143F010713FC01
0001E0EBE00033407DBE3A>100 D<ECFFF0010713FE011F6D7E017F809039FFE07FE048
9038801FF048496C7E48486D7E48486D7E121F491301003F81A2485A6F1380A212FFA290
B7FCA401F0C9FCA5127FA27F123FEE0F806C7E161F6C6C15006C6C5C6C6D137E6C9038E0
01FC6C9038F80FF8013FB55A6D14C0010391C7FC9038007FF8292B7DA930>I<EC07FE91
387FFF8049B512C0010714E090390FFE3FF0EB1FF090393FE07FF8EB7FC013FF1480A248
9038003FF0ED1FE0ED0FC092C7FCAAB612E0A500010180C7FCB3AC007FEBFF80A525407D
BF20>I<903A03FF8007F0013F9038F83FF8499038FCFFFC48B712FE48018313F93A07FC
007FC34848EB3FE1001FEDF1FC4990381FF0F81700003F81A7001F5DA26D133F000F5D6C
6C495A3A03FF83FF8091B5C7FC4814FC01BF5BD80F03138090CAFCA2487EA27F13F06CB6
FC16F016FC6C15FF17806C16C06C16E01207001F16F0393FE000034848EB003F49EC1FF8
00FF150F90C81207A56C6CEC0FF06D141F003F16E001F0147FD81FFC903801FFC02707FF
800F13006C90B55AC615F8013F14E0010101FCC7FC2F3D7DA834>I<13FFB5FCA512077E
AFED1FF8EDFFFE02036D7E4A80DA0FE07F91381F007F023C805C4A6D7E5CA25CA35CB3A4
B5D8FE0FB512E0A5333F7CBE3A>I<EA01F8487E487E487E481380A66C13006C5A6C5A6C
5AC8FCA913FFB5FCA512077EB3ABB512F8A515407CBF1D>I<13FFB5FCA512077EB3B3AF
B512FCA5163F7CBE1D>108 D<01FFEB1FF8B5EBFFFE02036D7E4A80DA0FE07F91381F00
7F0007013C806C5B4A6D7E5CA25CA35CB3A4B5D8FE0FB512E0A533297CA83A>110
D<EC7FF0903803FFFE011FEBFFC0017F14F09039FFE03FF8489038800FFC3A03FE0003FE
48486D7E000F168048486D13C0A2003F16E049147F007F16F0A400FF16F8AA007F16F0A4
6C6CECFFE0A2001F16C06C6C491380A26C6C4913003A03FF800FFE6C9038E03FFC6C6CB5
12F0011F14C0010791C7FC9038007FF02D2B7DA934>I<3901FE01FE00FF903807FF804A
13E04A13F0EC3F1F91387C3FF8000713F8000313F0EBFFE0A29138C01FF0ED0FE0913880
07C092C7FCA391C8FCB3A2B6FCA525297DA82B>114 D<EB07C0A5130FA4131FA3133F13
7FA213FF5A1207001FEBFFFEB6FCA40001EBC000B3151FA96CEBE03EA2017F137EECF8FC
90383FFFF86D13F0010713E001001380203B7EB929>116 D<B53CFC3FFFFC03FFFEA500
03D980009039C0000F806E161F6C037F15006E496C5B6C183E836E48157E017F177C6E48
6D13FC013F02EF5C83DAFC071401011F02C75CDAFE0FEBFE03010F02835C17FFDAFF1F14
076D02015C03BF148F6DD9BE005C18CF03FE14DF6D49017F90C7FC18FF6D496D5AA36E48
6D5AA26E486D5AA36E486D5AA26E486D5A47287EA74C>119 D E
/Fc 31 122 df<EA07F0EA1FF8EA3FFE487EA2B5128014C0A314E0A37EA27EEA1FFDEA07
F1EA0001A2130314C0A313071480130FA214005B133EA25B5B485A1203485A485A485A90
C7FC120C132876D225>39 D<EA07F0487E487E487E487EB51280A76C13006C5A6C5A6C5A
6C5A1111769025>46 D<157815FC14031407141F14FF130F0007B5FCB6FCA2147F13F0EA
F800C7FCB3B3B3A6007FB712FEA52F4E76CD43>49 D<EC3FFE0103B512E0010F14FC013F
14FF90B712C048D9C07F7F2703FE000F13F8D807F801037FD80FE06D7F48486D7F484880
01F01680486C6E13C07F486C6E13E07FA27013F0A56C5AA26C5AEA0FF0EA03C0C914E05E
A218C05E1880A24C13005F4C5A4B5B5F4B5B5F4B5B4B90C7FC4B5A5E4B5AED7FE04B5A4A
5B4A48C8FC4A5A5D4A48EB01F04A5AEC3F804AC7FC02FEEC03E0495A495A495A495AD91F
80140749C8FC013E150F017FB7FC90B812C05A5A5A5A5A5A5AB9FC1880A4344E79CD43>
I<91380FFFC091B512FC0107ECFF80011F15E090263FF8077F9026FF800113FC4848C76C
7ED803F86E7E491680D807FC8048B416C080486D15E0A4805CA36C17C06C5B6C90C75AD8
01FC1680C9FC4C13005FA24C5A4B5B4B5B4B13C04B5BDBFFFEC7FC91B512F816E016FCEE
FF80DA000713E0030113F89238007FFE707E7013807013C018E07013F0A218F8A27013FC
A218FEA2EA03E0EA0FF8487E487E487EB57EA318FCA25E18F891C7FC6C17F0495C6C4816
E001F04A13C06C484A1380D80FF84A13006CB44A5A6CD9F0075BC690B612F06D5D011F15
80010302FCC7FCD9001F1380374F7ACD43>I<177C17FEA2160116031607160FA2161F16
3F167FA216FF5D5DA25D5DED1FBFED3F3F153E157C15FCEC01F815F0EC03E01407EC0FC0
1580EC1F005C147E147C5C1301495A495A5C495A131F49C7FC133E5B13FC485A5B485A12
07485A485A90C8FC123E127E5ABA12C0A5C96C48C7FCAF020FB712C0A53A4F7CCE43>I<
D80380150ED807E0157E01FEEC03FED9FFF0137F91B65A5F5F5F5F5F94C7FC5E5E16F016
C093C8FC15F801E190C9FC01E0CAFCABEC0FFF027F13F001E3B512FE01E76E7E9026FFF8
077FDAC0017F49C713F8496E7E49143F4981496E7E6C481680C9FC18C08218E0A418F0A3
EA0FE0487E487E487E487EA418E0A35B6C484A13C05B491680003EC85A003F17006C6C4A
5A6D5D6C6C4A5AD807F8495BD803FE01075B2701FFC03F5B6C90B65A013F4AC7FC6D14F8
010314C09026007FF8C8FC344F79CD43>I<171F4D7E4D7EA24D7EA34C7FA24C7FA34C7F
A34C7FA24C7FA34C8083047F80167E8304FE804C7E03018116F8830303814C7E03078116
E083030F814C7E031F81168083033F8293C77E4B82157E8403FE824B800201835D840203
834B800207835D844AB87EA24A83A3DA3F80C88092C97E4A84A2027E8202FE844A820101
85A24A820103854A82010785A24A82010F855C011F717FEBFFFCB600F8020FB712E0A55B
547BD366>65 D<B912F0F0FF8019F819FF1AC0D8000701F0C714F0060F7F060113FE727F
737F737F85737F87A2737FA387A863A2616363A24F5B4F5B4F90C8FC4F5A06035B060F13
F095B512C092B8C9FC19F819E019F89226F0000313FE9439007FFF80727F727F727F727F
727F8684A28684A787A71D1C75133EA38575137E73157C7513FC731401B86C6D9038F803
F807039038FE07F07390B512E0736C14C0080F1400CEEA7FFC5F537CD164>82
D<003FBC1280A59126C0003F9038C0007F49C71607D87FF8060113C001E08449197F4919
3F90C8171FA2007E1A0FA3007C1A07A500FC1BE0481A03A6C994C7FCB3B3AC91B912F0A5
53517BD05E>84 D<B700FC017FB600FE91B612F0A5D8003F01C0C8001F01E0C9EBF8006F
71EE0FC06D7161876F1C1F6D7196C7FC6F8373606D1E3E6F836D7160876F1CFC6D666F4B
801F016D66704A806E525A88704A17076E059F5F70021F80080F160F6E6570023F806EDC
3E074CC8FC8870027E5F6EDC7C03163E7002FC804F6C167E6E1C7C700101814F6C16FC6E
745B70010317016E4C6D5D060716C00580496D14036F63DDC00F16E04F6D14076F07F05B
DDE01F170F6F92C76C5D1DF8DDF03E6E141F6F98C9FCDDF87E16FC067C6E5C6FF1FE3EDD
FCFC177E6F4A6E147C1DFFDDFFF06E14FC6F62A24E816F62A270496F5BA24E817061A295
C97E7061A270487090CAFCA37048705AA24D1601040360A27048705A84537DD18B>87
D<EC7FFF0107B512F0013F14FE90B77E48D9E00F7F2703FE000113F0486C6D7F6EEB3FFC
48826E131F83707FA36C496D7FA26C90C7FC6C5AC9FCA6037FB5FC020FB6FC91B7FC0107
1487013FEBF0074913803901FFFC004813F0485B485B485B4890C7FC5A5BA2485AA45EA2
6D5C007F151D163D6C6C02797F6C6D01F113F86C9026C003E1EBFFE06C9026F81FC014F0
6C90B5487EC6ED001F011F01FC010713E0010101E090C8FC3C387CB641>97
D<EB3FF0B5FCA51203C6FCB3A4923801FFE0030F13FE033FEBFFC092B612F002F301017F
913AF7F8003FFEDAFFE0EB0FFF03806D7F92C76C7F4A6E7F4A824A6E7FA2727EA285A285
84A31A80AC1A00A44E5AA36118FF616E4A5BA26E4A5B6E4A5B6F495BDACFC04990C7FCDA
87F0EB7FFC913A03FE03FFF849C6B612E0496D148049011F01FCC8FC90C7000313C04154
7BD24B>I<913801FFF8021FEBFF8091B612F0010315FC010F9038C00FFE903A1FFE0001
FFD97FFC491380D9FFF05B4817C048495B5C5A485BA2486F138091C7FC486F1300705A48
92C8FC5BA312FFAD127F7FA27EA2EF03E06C7F17076C6D15C07E6E140F6CEE1F806C6DEC
3F006C6D147ED97FFE5C6D6CEB03F8010F9038E01FF0010390B55A01001580023F49C7FC
020113E033387CB63C>I<4DB47E0407B5FCA5EE001F1707B3A4913801FFE0021F13FC91
B6FC010315C7010F9038E03FE74990380007F7D97FFC0101B5FC49487F4849143F484980
485B83485B5A91C8FC5AA3485AA412FFAC127FA36C7EA37EA26C7F5F6C6D5C7E6C6D5C6C
6D49B5FC6D6C4914E0D93FFED90FEFEBFF80903A0FFFC07FCF6D90B5128F0101ECFE0FD9
003F13F8020301C049C7FC41547CD24B>I<913803FFC0023F13FC49B6FC010715C04901
817F903A3FFC007FF849486D7E49486D7E4849130F48496D7E48178048497F18C0488191
C7FC4817E0A248815B18F0A212FFA490B8FCA318E049CAFCA6127FA27F7EA218E06CEE01
F06E14037E6C6DEC07E0A26C6DEC0FC06C6D141F6C6DEC3F806D6CECFF00D91FFEEB03FE
903A0FFFC03FF8010390B55A010015C0021F49C7FC020113F034387CB63D>I<DA3FFF14
FF0103B5D8F00713C0010FDAFC1F13E0013FECFF7F90267FFC0F9038FF9FF09026FFE001
EBF83F48496C13E0484990387FF01F4890C7D83FF813E0489338FC0FC0F0078048486E6C
C7FCA2003F82A9001F5EA26C6C4A5AA26C5E6C6D495A6C6D495A6C6D485BDAFC0F5B4890
B6C8FCD803EF14FC01C314F02607C03F90C9FC91CBFCA2120FA37FA213F813FE90B7FC6C
16F817FF18C06C836C836C836D828448B9FC12074848C700031480D81FF8EC003F484815
0748486F13C083485A83A56D5D007F18806D5D003F18006C6C4B5AD80FFEED1FFC6C6C6C
EC7FF86C01E049485A6C01FE011F5B6C6CB71280010F03FCC7FC010115E0D9000F01FCC8
FC3C4F7CB543>103 D<EB3FF0B5FCA51203C6FCB3A4EE1FFC93B512C0030314F0030F80
92391FE07FFC92393F001FFE037C8003F07FDAF1E081ECF3C0DAF7807F8502FFC7FC5CA2
5CA45CB3ACB6D8F807B612C0A542537BD24B>I<137F497E000313E0487FA2487FA76C5B
A26C5BC613806DC7FC90C8FCADEB3FF0B5FCA512017EB3B3A6B612E0A51B547BD325>I<
EB3FF0B5FCA512017EB3B3B3B1B612F0A51C537BD225>108 D<D93FF0D91FFCEDFFE0B5
91B500C0010713FE030302F0011F6D7E030F6E017F8092271FE07FFCD9FF037F922A3F00
1FFE01F8007F0003027C9126FF03E080C602F06DD90780137FDAF1E0038FC77FDAF3C015
9EDAF7806D01BC143F07FC8102FFC75C4A5EA24A5EA44A5EB3ACB6D8F807B6D8C03FB512
FEA567367BB570>I<D93FF0EB1FFCB591B512C0030314F0030F8092391FE07FFC92393F
001FFE0003027C80C602F07FDAF1E081ECF3C0DAF7807F8502FFC7FC5CA25CA45CB3ACB6
D8F807B612C0A542367BB54B>I<913801FFE0021F13FE91B612C0010315F0010F903880
7FFC903A1FFC000FFED97FF86D6C7E49486D7F48496D7F48496D7F4A147F48834890C86C
7EA24883A248486F7EA3007F1880A400FF18C0AC007F1880A3003F18006D5DA26C5FA26C
5F6E147F6C5F6C6D4A5A6C6D495B6C6D495B6D6C495BD93FFE011F90C7FC903A0FFF807F
FC6D90B55A010015C0023F91C8FC020113E03A387CB643>I<903A3FF001FFE0B5010F13
FE033FEBFFC092B612F002F301017F913AF7F8007FFE0003D9FFE0EB1FFFC602806D7F92
C76C7F4A824A6E7F4A6E7FA2717FA285187F85A4721380AC1A0060A36118FFA2615F616E
4A5BA26E4A5B6E4A5B6F495B6F4990C7FC03F0EBFFFC9126FBFE075B02F8B612E06F1480
031F01FCC8FC030313C092CBFCB1B612F8A5414D7BB54B>I<90397FE003FEB590380FFF
80033F13E04B13F09238FE1FF89139E1F83FFC0003D9E3E013FEC6ECC07FECE78014EF15
0014EE02FEEB3FFC5CEE1FF8EE0FF04A90C7FCA55CB3AAB612FCA52F367CB537>114
D<903903FFF00F013FEBFE1F90B7FC120348EB003FD80FF81307D81FE0130148487F4980
127F90C87EA24881A27FA27F01F091C7FC13FCEBFFC06C13FF15F86C14FF16C06C15F06C
816C816C81C681013F1580010F15C01300020714E0EC003F030713F015010078EC007F00
F8153F161F7E160FA27E17E07E6D141F17C07F6DEC3F8001F8EC7F0001FEEB01FE9039FF
C00FFC6DB55AD8FC1F14E0D8F807148048C601F8C7FC2C387CB635>I<143EA6147EA414
FEA21301A313031307A2130F131F133F13FF5A000F90B6FCB8FCA426003FFEC8FCB3A9EE
07C0AB011FEC0F8080A26DEC1F0015806DEBC03E6DEBF0FC6DEBFFF86D6C5B021F5B0203
13802A4D7ECB34>I<D93FF8913801FFC0B50207B5FCA50003ED001FC61607B3AE5FA35F
A2017F5D173B177B6D6C14F3DC01E313F06D6CD907C3EBFFC0903A0FFFC03F836D90B512
03010114FE6D6C13F8020701E091C7FC42377BB54B>I<B600F00107B5FCA5000101F8C8
EA7FE06C6DED3F00A2017F163E6E157E013F167C6E15FC6D5E6F13016D5E8117036D5E6F
13076D5E6F130F6D5E6F131F6D93C7FC815F6E6C133E177E023F147C6F13FC6E5C16816E
5C16C3A26EEBE3E016E76E5C16FF6E5CA26E91C8FCA26F5AA36F5AA26F5AA26F5AA26F5A
6F5A40367DB447>I<007FB500F090387FFFFEA5C66C48C7000F90C7FC6D6CEC07F86D6D
5C6D6D495A6D4B5A6F495A6D6D91C8FC6D6D137E6D6D5B91387FFE014C5A6E6C485A6EEB
8FE06EEBCFC06EEBFF806E91C9FCA26E5B6E5B6F7E6F7EA26F7F834B7F4B7F92B5FCDA01
FD7F03F87F4A486C7E4A486C7E020F7FDA1FC0804A486C7F4A486C7F02FE6D7F4A6D7F49
5A49486D7F01076F7E49486E7E49486E7FEBFFF0B500FE49B612C0A542357EB447>120
D<B600F00107B5FCA5C601F8C8EA7FE06EED3F00A26D6C153E187E013F167C6E15FC6D5E
6F13016D5E6F13036D5E8117076D6D5C170F6D6D5C171F6D93C7FC6F5B027F143E6F137E
023F147C6F13FCA26E6D5A16816EEBC1F016C36E5C16E76E5C16FF6E5CA26E91C8FCA36F
5AA26F5AA26F5AA26F5AA26F5AA35E150F5E151F93C9FC5DD81FC0133E486C137E486C13
7C486C13FC5D14015D14034A5A6C48485A49485A263FC07FCAFCEB81FE6CB45A6C13F000
035BC690CBFC404D7DB447>I E /Fd 22 118 df<121FEA3F80EA7FC0EAFFE0A5EA7FC0
EA3F80EA1F000B0B768A20>46 D<EC7FC0903803FFF890380FC07E90393F001F80017E6D
7E496D7E48486D7E48486D7EA248486D7E000F8149147E001F157FA3003F1680A249143F
007F16C0A600FF16E0B3A2007F16C0A66C6CEC7F80A3001F1600A36C6C14FEA200075D6D
130100035D6C6C495A6C6C495A017E495A6D495A90260FC07EC7FC903803FFF89038007F
C02B447BC137>48 D<1438147814F81303130F13FFB5FC13F713071200B3B3B0497E497E
B712C0A3224276C137>I<49B4FC010F13F0013F13FC9038FC03FF2601E00013C0D807C0
EB3FE048486D7E90C76C7E001E6E7E4881003814030078811270007C80B416807F7F81A4
6C485B6CC7FCC8FC17005DA25E15075E4B5AA24B5A5E4B5A4B5A4BC7FC5D4A5A4A5A4A5A
EC0FC04A5A92C8FC143E5C5C495A4948EB0380EB078049C7FC011EEC07005B5B5B48485C
485A49141E48B612FE5A5A5A5AB75AA329427AC137>I<ECFFC0010713FC90381F80FF90
3978003FC0D801E0EB0FE0484814F848486D7E90C71203486C8013E0486C806D7FA56C48
5B6C485CC8FCA24B5AA25E4B5A5E4B5A4B5A4BC7FC15FCEC0FF0903807FFC015FC90C7B4
FCED1FC06F7EED07F86F7E826F7EA26F138017C0A2167F17E0A3121FEA7FC0A2487EA317
C016FF5B6C481580007EC75A007816006C4A5A7E6C4A5AD807C0EB0FF0D803F0495AC6B4
EB7FC0013FB5C7FC010F13F8010013C02B447BC137>I<16E015011503A21507150FA215
1F153FA2157F15EF15CF1401EC038F150F1407140E141CA214381470A214E0EB01C0A2EB
0380EB0700A2130E5B131813385B136013E0485A485AA248C7FC120EA25A5AA25A5AB812
F8A3C8381FE000AC4B7E4B7E027FB512F8A32D437CC237>I<0007151801E014F801FEEB
1FF090B65A5E5E93C7FC15FC15F015C0D90FFEC8FC90CAFCADEC7FC0903803FFF890380F
807E90381C003F01786D7E01E0EB0FE0496D7E5B6F7E90C77FC8120182A28281A21780A5
123EEA7F8012FF7FA34915005D48C7FC00705DA200784A5A1238003C4A5A6C5D6C4A5A6D
495A6C6C495AD803F049C7FC3900FE03FE90387FFFF8011F13C0D903FEC8FC29447AC137
>I<EC01FE91381FFFC091387E01F0903901F80078D903E07FD90FC07F495A49C7127F01
7E5C495B12015B120348486D5A167C484891C7FCA2121F5B123FA3127FA29038801FE0EC
FFFC903883E03F3AFF87000FC0018E6D7E019C6D7E01986D7E01B88001B06D7E01F08049
8017805BEE3FC0A34915E0A4127FA56C7EA217C0A2121F167F6C6C1580A20007EDFF006D
5C000314016C6C5C6D495A6C6C495A017F495A90391FC07F800107B5C7FC010113FC9038
007FC02B447BC137>I<121C121EEA1FC090B712F0A34816E0A217C017801700003CC812
0F48151E5E0070153816785E4B5A485D15034B5AC848C7FC150E151E5D5D157015F04A5A
A24A5AA24A5A140FA24AC8FCA25C143E147EA35CA21301A31303A25CA21307A6130FAA6D
5AEB01C02C4579C237>I<EC7FC0903803FFFC90380F807F90393C000FC049EB03E001E0
6D7E48486D7E0003157C4848147E163E48C8FC825AA37FA27F5E6D143E01F8147E6C6C14
7C01FF5C6CEB800102E05B6C6D485A6C9038FC0F806CD9FF1FC7FC6D13FC6D13F0130F6D
13FC010113FF4980D90F3F13E0D93E0F7FD9F8077F2601F0017F48486C7F4848EB3FFF48
48010F138048C77E48020113C0003E80007E153F007CED1FE0160F5A1607A21603A46C16
C0127C1607007E16806CED0F006C5D6D143ED80FE05C6C6C5CD801FCEB03F03A00FF803F
C0013FB5C7FC010713FC010013C02B447BC137>I<EC7FC0903803FFF890380FC07E9039
3F001F80017E6D7E48486D7E48486D7E48486D7E485A6F7E484880123F167F127F5B1780
12FFA2EE3FC0A617E0A4007F157FA36C7E16FF121F6D5B000F15BF6C6C13030003153F6C
6C13076C6C130E017E133C90261F80F013C0903807FFE00100130091C7FC167F1780A317
005E5EA2D807C0495A487E486C495AA24B5A5E49495A49495A6CC748C7FC157E3907C001
FC3903F007F06CB55A6C6C1380D90FFCC8FC2B447BC137>I<BAFCA3C601F0C7121F6D48
02011380013FED007F183F181F180F1807A2F003C0A31801A419E01800EE01C0A21900A4
1603A31607160F167F91B6FCA39138E0007F160F16071603A31601A693C9FCB0497E497E
B7FCA33B447BC347>70 D<B77E16F016FC3A03FC0003FF6C4801001380EE3FC017E0161F
EE0FF0A217F8A21607A2160FA217F0161F17E0EE3FC0EE7F80EEFF00ED03FE90B612F0A2
9039F80007FE9238007F80EE1FC0EE0FF0EE07F817FC160317FE160117FFA617FE1603A2
EE07FCEE0FF8EE1FF0EE3FE0486C903801FFC0B8120016FC16E030337BB23A>98
D<4AB4EB0180021FEBF00391B5EAFC0701039038007E0FD907F8EB0F9FD91FE0EB03DF49
48EB01FF01FFC8FC4848157F4848153FA24848151F4848150F121F491507123F5BA2007F
1603A3484892C7FCAB6C7EEF0380A2123FA27F001F16076D1600000F5E6C6C150E6C6C15
1E171C6C6C153C6C6C5DD93FC05C6D6CEB03E0D907F8495A902703FF807FC7FC0100EBFF
FC021F13F00201138031357BB33B>I<B7FC16F016FC3A03FE0003FF6C489038007F80EE
1FE0707E707E707E1601707E177FA21880173F18C0A2EF1FE0A418F0AA18E0A4EF3FC0A2
1880177F180017FE16015F4C5AEE0FF04C5AEE7FC0486CD903FFC7FCB712FC16F093C8FC
34337BB23E>I<B812F0A3D803FEC7123F6C48EC07F816011600A21778A21738A3171C15
07A31700A25DA25D157F90B6FCA39038FC007F151F81A2811707A3170E92C7FCA4171EA2
173CA2177C17FC16011607486C143FB812F8A330337BB238>I<B812C0A3D803FEC7FC6C
48EC1FE0160716031601A21600A41770A2150EA21700A3151EA2153E15FE90B5FCA3EBFC
00153E151EA2150EA592C8FCAB48B4FCB512FEA32C337BB235>I<DA03FF1303021FEBE0
0791B5EAF80F0103903800FE1FD90FF8EB1F3FD91FE0EB07BFD97F806DB4FC49C77E4848
80484881484881A2484881121F4981123F5BA2007F82A25B00FF93C7FCAA4BB512F86C7E
A2DB00011380003F6F1300837F121F7F120F6C7E7F12036C7E6C6C5DEB7FC0D91FE05BD9
0FF8EB07DF903A03FF803F8F01009038FFFE07021FEBF80302030180C7FC35357BB340>
I<B512F8A33803FE006C5AB3B3A7487EB512F8A315337BB21E>105
D<B612F8EDFF8016E03A03FE000FF86C48EB03FEED00FF707E707E83161FA283A55FA24C
5A5F4CC7FC16FEED03FCED1FF090B6128003FCC8FC9038FC003FED0FC06F7E6F7E6F7E82
150082A382A383A4EFC01CA2167FEFE03C486C023F1338B500F890381FF07893380FF8F0
933803FFE0CAEA7F8036347BB23C>114 D<007FB812C0A3903A8007FC003F277E0003F8
130F007C16070078160300701601A200F017E0A2481600A6C71600B3AA4A7E4A7E010FB5
12FEA333327CB13B>116 D<B500F890383FFFE0A3D803FEC7000713006C48EC01FC705A
1770B3AE000016F06D5DA2017E1401017F4A5A7F6D6C495A6E49C7FC6D6C131ED903F013
7C903901FE03F89039007FFFE0021F1380DA03FCC8FC33347BB23D>I
E /Fe 10 113 df<007FB812FEBAFCA26C17FE3804799847>0 D<0060166000F816F06C
1501007E15036CED07E06C6CEC0FC06C6CEC1F806C6CEC3F006C6C147E6C6C5C6C6C495A
017E495A6D495A6D6C485A6D6C485A6D6C48C7FC903803F07E6D6C5A903800FDF8EC7FF0
6E5A6E5AA24A7E4A7EECFDF8903801F8FC903803F07E49487E49486C7E49486C7E49486C
7E017E6D7E496D7E48486D7E4848147E4848804848EC1F804848EC0FC048C8EA07E0007E
ED03F0481501481500006016602C2C73AC47>2 D<EB0FFCEB3FFF90B512C0000314F039
07F807F8390FE001FC391F80007E48C77E003E8048EC0F80A20078140700F815C0A24814
03A66C1407A200781580007C140FA26CEC1F00003F5C6C6C137E390FE001FC3907F807F8
6CB55AC614C0013F90C7FCEB0FFC22227BA72D>14 D<0203B512F8023F14FC91B6FC0103
15F8D90FFEC8FCEB1FE0EB7F8001FEC9FCEA01F8485A485A485A5B48CAFCA2123EA25AA2
1278A212F8A25AA2B812F817FCA217F800F0CAFCA27EA21278A2127CA27EA27EA26C7E7F
6C7E6C7E6C7EEA00FEEB7F80EB1FE0EB0FFE0103B612F8010015FC143F020314F82E3679
B13D>50 D<1718173C177CA217F8A2EE01F0A2EE03E0A2EE07C0160F1780EE1F00A2163E
A25EA25EA24B5AA24B5AA24B5AA24B5AA24BC7FCA2153E157E157C5DA24A5AA24A5AA24A
5AA24A5AA24AC8FCA2143EA25CA25C13015C495AA2495AA2495AA249C9FCA2133EA25BA2
5BA2485AA2485AA2485A120F5B48CAFCA2123EA25AA25AA25A12602E5474C000>54
D<1518153CA2157CA2903803FC7890380FFFF8EB3E0790387801F0EBF0004848487ED803
C07FD807807FA2390F0003EFA248ECCF80001EEB07C7003E15C01587A2140F007E15E000
7C1403A2141FA2141E00FC013E13F0A2143CA2147CA21478A214F8A214F01301A214E0A2
1303A214C0A21307A21480D87C0F14E0A21400007E14075BA2D83E1E14C0A2133E001FEC
0F80133CD80F7C1400A2495B0007141E00035C00015C4913F83900F801E03901FE07C090
B5C7FCEBE3FCD803E0C8FCA25BA26C5A244D7CC52D>59 D<0060EE018000F0EE03C0B3B3
A36C1607A200781780007C160FA26CEE1F00003F5E6C6C157E6C6C5DD807F0EC03F8D803
FCEC0FF06CB4EC3FE03B007FF003FF80011FB548C7FC010714F8010114E09026001FFEC8
FC32397BB63D>91 D<153FEC03FFEC0FE0EC3F80EC7E00495A5C495AA2495AB3AA130F5C
131F495A91C7FC13FEEA03F8EA7FE048C8FCEA7FE0EA03F8EA00FE133F806D7E130F8013
07B3AA6D7EA26D7E80EB007EEC3F80EC0FE0EC03FFEC003F205B7AC32D>102
D<12FCEAFFC0EA07F0EA01FCEA007E6D7E131F6D7EA26D7EB3AA801303806D7E1300147F
EC1FC0EC07FEEC00FFEC07FEEC1FC0EC7F0014FC1301495A5C13075CB3AA495AA2495A13
3F017EC7FC485AEA07F0EAFFC000FCC8FC205B7AC32D>I<1A061A0F1A1FA21A3EA21A7C
A21AF8A2F101F0A2F103E0A2F107C0A2F10F80A2F11F00A2193EA261A261A24E5AA24E5A
A24E5AA24E5AA24EC7FCA2183EA260A260A24D5AA24D5A133801F85E486C15071203D80F
FE4B5A121D00394CC8FCEAF1FF00C0163EC67F017F5D80013F5D80011F4A5A80010F4A5A
8001074A5AA26E495A13036E49C9FC13016E133E7F6F5A147F6F5A143FEDE1F0141FEDE3
E015F391380FF7C015FF6E5BA26E90CAFCA26E5AA26E5AA215781570485B7A834C>112
D E /Ff 16 122 df<EC01C0EC0FFF023F13E0027913F0ECE03F903801C00FEC8007ED01
E0010390C7FCA280130180A280A26D7E80A2147E147F6E7EA26E7E81140FEC7FF0903801
F7F8EB07C790381F83FCEB3E03EB7C0101F87F12013803F000485AA24848137E485AA212
3F90C7FCA25A127EA300FE147C5A15FCA25D1401A25D007C13035DA26C495A4A5A6C91C7
FC6C131E6C6C5A3803E0783800FFE0EB3F8024427CC028>14 D<121EEA7F8012FF13C0A2
13E0A3127FEA1E601200A413E013C0A312011380120313005A120E5A1218123812300B1C
798919>59 D<1806181F187FEF01FFEF07FCEF1FF0EF7FC0933801FF00EE07FCEE3FF0EE
FFC0030390C7FCED0FFCED3FE0EDFF80DA03FEC8FCEC0FF8EC7FE0903801FF80D907FEC9
FCEB1FF8EB7FC04848CAFCEA07FCEA1FF0EA7FC048CBFCA2EA7FC0EA1FF0EA07FCEA01FF
38007FC0EB1FF8EB07FE903801FF809038007FE0EC0FF8EC03FE913800FF80ED3FE0ED0F
FCED03FF030013C0EE3FF0EE07FCEE01FF9338007FC0EF1FF0EF07FCEF01FFEF007F181F
1806383679B147>I<ED0180ED03C01507A21680150FA216005DA2151E153EA2153C157C
A2157815F8A25D1401A25D1403A25D1407A25D140FA24AC7FCA2141E143EA2143C147CA2
147814F8A25C1301A25C1303A25C1307A25C130FA291C8FC5BA2131E133EA25BA2137813
F8A25B1201A25B1203A25B1207A25B120FA290C9FC5AA2121E123EA2123C127CA2127812
F8A25A1260225B7BC32D>I<126012F812FE6C7EEA3FE0EA0FF8EA03FEC66C7EEB3FE0EB
0FFCEB03FF010013C0EC3FF0EC07FCEC01FF9138007FC0ED1FF0ED07FE923801FF809238
007FE0EE1FF8EE03FE933800FF80EF3FE0EF0FF8EF03FEEF00FFA2EF03FEEF0FF8EF3FE0
EFFF80933803FE00EE1FF8EE7FE0923801FF80DB07FEC7FCED1FF0ED7FC04A48C8FCEC07
FCEC3FF0ECFFC0010390C9FCEB0FFCEB3FE0EBFF80D803FECAFCEA0FF8EA3FE0EAFF8048
CBFC12F81260383679B147>I<17075F84171FA2173F177FA217FFA25E5EA24C6C7EA2EE
0E3F161E161C1638A21670A216E0ED01C084ED0380171FED07005D150E5DA25D15781570
5D844A5A170F4A5A4AC7FC92B6FC5CA2021CC7120F143C14384A81A24A140713015C495A
A249C8FC5B130E131E4982137C13FED807FFED1FFEB500F00107B512FCA219F83E417DC0
44>65 D<49B77E18F818FFD90001D900017F9438003FE04BEC0FF0727E727E14034B6E7E
A30207825DA3020F4B5A5DA24E5A141F4B4A5A614E5A023F4B5A4B4A5A06FEC7FCEF03FC
027FEC0FF04BEBFF8092B500FCC8FC5F9139FF8001FE92C7EA7F80EF1FC084496F7E4A14
07A28413035CA2170F13075C60171F130F5CA3011F033F5B4AEE038018E0013F17071A00
4A021F5B496C160EB600E090380FF01E05075B716C5ACBEAFFE0F03F8041407DBD45>82
D<48B912FCA25A913A0003FE000F01F84A1301D807E0EE00F8491307491778000F5D90C7
FC001E140FA2001C4B1470123C0038141FA200785D1270033F15F000F018E0485DC81600
157FA25EA215FFA293C9FCA25CA25DA21403A25DA21407A25DA2140FA25DA2141FA25DA2
143FA25DA2147FA214FF497F001FB612FCA25E3E3D7FBC35>84 D<143C14FEA21301A314
FCEB00701400AD137E3801FF803803C7C0EA0703000F13E0120E121C13071238A2EA780F
007013C0A2EAF01F14801200133F14005B137EA213FE5BA212015B0003130E13F0A20007
131EEBE01CA2143CEBC0381478147014E013C13803E3C03801FF00EA007C173E7EBC1F>
105 D<ED01C0ED07F0A2150FA316E0ED038092C7FCADEC03E0EC0FF8EC3C3EEC701EECE0
1FEB01C001031480EB0780140049133F010E1400131E131C013C5BA290C7127EA215FEA2
5DA21401A25DA21403A25DA21407A25DA2140FA25DA2141FA25DA2143FA292C7FCA25C14
7EA2001C13FE007F5BEAFF015C495A495A48485A38F81F80D8783EC8FCEA3FF8EA0FE024
5081BC25>I<EB01FC13FF5CA21303A25CA21307A25CA2130FA25CA2131FA25CA2133FA2
91C9FC16FC49EB03FE92380F0780017EEB3C0FED703F01FE13E0913801C07F9038FC0380
EC07000001010E14004A131C494890C7FC5C00035BEBF9C0495A01FFC9FC5A14F0EBE3FE
9038E07F80000FEB1FC06E7EEBC00781001F1303160E1380A2003F151E0207131C010013
E0A2485DA2007E01031378167000FE01015B15F1489038007F800038023EC7FC29407CBE
2F>I<D801F0EB0FF0D807FCEB3FFED80F1FEBF01F000E903903C00F80271E0F87007F00
1C018E1307003C01DC80003813F85CEA781F00705B5CA200F049130F013F5D000090C7FC
A2161F495D137E163F94C7FC13FE495C167EA200019238FE03804914FCA2030113070003
03F813005B5FEEF00E0007161E49151C5F1778000F6E6C5A49EC7FC0D80380021FC7FC31
297EA737>110 D<EC1FC0ECFFF8903803E03C903807800E90381E0007168049130F4913
1F153FA201F81400A2151C6D90C7FC7FEBFFE014FE90387FFFC06D7F6D13F86D7F130390
38001FFE14031400157E000C143E123F487EA248C7123CA25D12FC00F05C0070495A0078
495A6C495A260F803EC7FC3803FFF838007FC021297CA72B>115
D<017E147848B4EB01FC2603C7C013FED807031303000F13E0120E121C01071301003814
00167ED8780F143E00705B161EEAF01F4A131C1200133F91C7123C16385B137E167801FE
14705B16F016E0120149EB01C0A2ED0380A2ED0700A20000140E5D6D133C017C5B6D5B90
381F03C0903807FF80D901FCC7FC27297EA72C>118 D<D901F8133FD907FEEBFFE0903A
1E0F83C0F0903A3807C780F890397003CF0301E013FED801C0EBFC071203018013F8D807
0015F0EE01C0000E4AC7FCA2001E1307A2C75BA2140F5DA3141F5DA3143F92380001C0A3
4A1303001E1680003F017E1307267F80FE14005ED8FF81141ED901DF131CD8FE035C3A7C
078F80F03A3C0F07C1E03A1FFC03FF802707F0007EC7FC2D297EA734>120
D<137C48B4EC03802603C7C0EB0FC0EA0703000F7F000E151F001C168013071238163FD8
780F150000705BA2D8F01F5C4A137E1200133F91C712FE5E5B137E150113FE495CA21503
00015D5BA215075EA2150F151F00005D6D133F017C137F017E13FF90393F03DF8090380F
FF1FEB01FC90C7123F93C7FCA25DD80380137ED80FE013FE001F5C4A5AA24848485A4A5A
6CC6485A001C495A001E49C8FC000E137C380781F03803FFC0C648C9FC2A3B7EA72D>I
E /Fg 7 115 df<171C173C177CA217FCA216011603A21607A24C7EA2161DA216391679
167116E1A2ED01C1A2ED038115071601150EA2031C7FA24B7EA25D15F05D4A5AA24A5AA2
4AC7FC5C140E5C021FB6FC4A81A20270C7127FA25C13015C495AA249C8FCA2130E131E13
1C133C5B01F882487ED807FEEC01FFB500E0017FEBFF80A25C39417BC044>65
D<49B812F0A390260003FEC7123F180F4B1403A2F001E014075DA3140F5D19C0A2141F5D
1770EFF003023F02E013804B91C7FCA21601027F5CED8003A2160702FFEB1F8092B5FCA3
49D9003FC8FC4A7F82A20103140E5CA2161E0107141C5CA293C9FC130F5CA3131F5CA313
3F5CA2137FA25C497EB612E0A33C3E7BBD3B>70 D<EE3F80ED1FFF1700A2ED007FA2167E
A216FEA25EA21501A25EA21503A25EA21507A25E147E903801FF8F903807C1CF90391F80
EFC090383F00FF017E137F5B48486D5A485AA2485A000F92C7FC5B001F5CA24848137EA2
15FE127F90C75AA214015A485CA2140316384814F0A21407167891380FE070127C021F13
F0007E013F5B003E137FECF3E1261F01E35B3A0F8781E3802703FF00FFC7FCD800FC133E
294077BE2E>100 D<1507ED1FC0A2153FA31680ED0E0092C7FCADEC07C0EC3FF0EC78F8
ECE07CEB01C01303EC807EEB0700A2010E13FE5D131E131CEB3C01A201005BA21403A25D
A21407A25DA2140FA25DA2141FA25DA2143FA292C7FCA25CA2147EA214FEA25CA213015C
A2121C387F03F012FF495A5C495A4848C8FCEAF83EEA707CEA3FF0EA0FC0225083BC1C>
106 D<D801F0D93F80137F3D07FC01FFE003FFC03D0F3E07C1F80F83F03D0E1F0F00FC1E
01F8001E011C90387C3800001C49D97E707F003C01F05C0038157F4A5C26783FC05C1270
4A91C7FC91C7127E00F003FE1301494A5CEA007EA20301140301FE5F495CA20303140700
0160495C180F03075D0003051F13E0494A1480A2030FEC3F810007F001C0495CA2031F91
383E0380120F494AEC0700A2033F150E001FEF1E1C4991C7EA0FF80007C7000EEC03E043
2979A74A>109 D<EC1FC0ECFFF8903803F07C90380FC01FEB1F8090393F000F80017E14
C0491307484814E0485A12075B000F15F0485AA2485AA2ED0FE0127F90C7FCA2151F4815
C05AA2ED3F80A2ED7F00A248147E007C5C007E13015D4A5A003E495A6C495A4A5A260F80
3EC7FC3807C0FC3801FFF038003F80242977A72E>111 D<D801F013FC3A07FC07FF803A
0F3E0F03C0260E1F1C13E0001EEB380F001C1370003CEBE01F123814C0D8783F14C00070
903880070092C7FC91C8FC12F05BEA007EA313FE5BA312015BA312035BA312075BA3120F
5BA3121F5B0007C9FC232979A726>114 D E /Fh 31 122 df<16E04B7EA24B7EA24B7E
A24B7EA2ED1DFFA203387FA29238787FC015709238F03FE015E002016D7E15C002036D7E
158002076D7E15004A6D7E140E021E6D7E141C023C6D7F143802786E7E147002F06E7E5C
01016F7E5C01036F7E5C01076F7E91C8FC496F7E130E011E6F7E131C013C6F7F13380178
707E137001F0707E5B0001717E5B0003717E5B0007717E90CAFC48717E120E001E717E00
1FBAFC481980A24819C0A2BB12E0A243417CC04C>1 D<4AB4FC021F13C091387F01F090
3901FC0078D907F0131C4948133E494813FF49485A137F1400A213FE6F5A163893C7FCAA
167FB8FCA33900FE00018182B3AC486CECFF80007FD9FC3F13FEA32F407FBF33>12
D<1430147014E0EB01C0EB03801307EB0F00131E133E133C5B13F85B12015B1203A2485A
A2120F5BA2121F90C7FCA25AA3123E127EA6127C12FCB2127C127EA6123E123FA37EA27F
120FA27F1207A26C7EA212017F12007F13787F133E131E7FEB07801303EB01C0EB00E014
701430145A77C323>40 D<12C07E12707E7E121E7E6C7E7F12036C7E7F12007F1378137C
A27FA2133F7FA21480130FA214C0A3130714E0A6130314F0B214E01307A614C0130FA314
80A2131F1400A25B133EA25BA2137813F85B12015B485A12075B48C7FC121E121C5A5A5A
5A145A7BC323>I<1506150FB3A9007FB912E0BA12F0A26C18E0C8000FC9FCB3A915063C
3C7BB447>43 D<EB01FE90380FFFC090383F03F090387C00F849137C48487F48487F4848
EB0F80A2000F15C04848EB07E0A3003F15F0A290C712034815F8A64815FCB3A26C15F8A5
6C6CEB07F0A3001F15E0A36C6CEB0FC0A26C6CEB1F80000315006C6C133E6C6C5B017C5B
90383F03F090380FFFC0D901FEC7FC263F7DBC2D>48 D<EB01C013031307131F137FEA07
FFB5FC139FEAF81F1200B3B3ACEB7FF0B612F8A31D3D78BC2D>I<EB07FC90383FFF8090
B512E03903F01FF83907C007FC390F0001FE001E6D7E001C1580003CEC7FC05AED3FE012
70B4FC6DEB1FF07FA56C5A6CC7FC120CC813E0153FA216C0157F168015FF16004A5A5D4A
5A4A5A5D4A5A4A5A4AC7FC147E147C5C495A495A495A495A49C71270133E133C5B4914E0
485A485A485A48C7120148B6FCA25A4815C0B7FCA3243D7CBC2D>I<EB07FC90383FFF80
9038F80FE03901E003F839078001FCD80F007F000E6D7E001E1580D81F80137F486C14C0
7FA27F5BA2121F6C5AC8138015FF1600A24A5AA24A5A5DEC07E04A5A023FC7FCEB1FFCEC
FF809038000FE0EC07F86E7E6E7E6E7E1680ED7FC0A216E0153FA216F0A2120C123F487E
487EA316E0A249137F6CC713C01278EDFF807E6C4913006C495A3907C007FC3903F80FF0
C6B55A013F1380D907F8C7FC243F7CBC2D>I<150E151E153EA2157EA215FE1401A21403
EC077E1406140E141CA214381470A214E0EB01C0A2EB0380EB0700A2130E5BA25B5BA25B
5B1201485A90C7FC5A120E120C121C5AA25A5AB8FCA3C8EAFE00AC4A7E49B6FCA3283E7E
BD2D>I<00061403D80780131F01F813FE90B5FC5D5D5D15C092C7FC14FCEB3FE090C9FC
ACEB01FE90380FFF8090383E03E090387001F8496C7E49137E497F90C713800006141FC8
13C0A216E0150FA316F0A3120C127F7F12FFA416E090C7121F12FC007015C012780038EC
3F80123C6CEC7F00001F14FE6C6C485A6C6C485A3903F80FE0C6B55A013F90C7FCEB07F8
243F7CBC2D>I<EC1FE0ECFFF8903803F03E90380FC00F90391F000780133E017EEB1FC0
49133F4848137F12035B12074848EB3F80ED1F00001F91C7FC5BA2123FA3485AA214FE90
3887FF8039FF8F07E090389C01F09038B800FC01B0137E13F0497F16804914C0A2ED1FE0
A34914F0A5127FA6123F6D14E0A2121FED3FC0A26C6C1480A20007EC7F006C6C137E6C6C
5B6C6C485A90387E07F06DB45A010F1380D903FCC7FC243F7CBC2D>I<1238123C123F90
B612FCA316F85A16F016E00078C712010070EC03C0ED078016005D48141E151C153C5DC8
127015F04A5A5D14034A5A92C7FC5C141EA25CA2147C147814F8A213015C1303A31307A3
130F5CA2131FA6133FAA6D5A0107C8FC26407BBD2D>I<EB03FC90381FFF8090387C07E0
9038F001F83901E0007C48487F48487F48C7FCED0F80121E16C0003E1407A4123FA26DEB
0F807F6C6C131F6D140001FC133E6C6C5B9038FF80786C6D5A6CEBF3E06CEBFF806C91C7
FC133F6D13C06D7F013F13F801787F48486C7E3903E01FFF48486C1380260F800313C048
487E489038007FE0003E143F007E141F007CEC0FF01507481403A31501A46C15E0007C14
03A2007E15C06C14076CEC0F806DEB1F006C6C133ED807F05B3901FC03F86CB512E0011F
1380D903FCC7FC243F7CBC2D>I<121EEA7F80A2EAFFC0A4EA7F80A2EA1E00C7FCB3121E
EA7F80A2EAFFC0A4EA7F80A2EA1E000A2779A619>58 D<121EEA7F80A2EAFFC0A4EA7F80
A2EA1E00C7FCB3121E127FEAFF80A213C0A4127F121E1200A412011380A3120313005A12
06120E120C121C5A1230A20A3979A619>I<007FB912E0BA12F0A26C18E0CDFCAE007FB9
12E0BA12F0A26C18E03C167BA147>61 D<EAFFFCA4EAF000B3B3B3B3ABEAFFFCA40E5B77
C319>91 D<EAFFFCA4EA003CB3B3B3B3ABEAFFFCA40E5B7FC319>93
D<EA01FC12FFA3120712031201B1EC03FC91381FFF8091387C07E09039FDE001F09039FF
C000FC4A137E91C77E49158049141F17C0EE0FE0A217F0A2160717F8AA17F0A2160FA217
E0161F17C06D1580EE3F006D5C6E13FE9039F3C001F89039F1E003F09039E0780FC09026
C03FFFC7FCC7EA07F82D407EBE33>98 D<ED01FC15FFA3150715031501B114FF010713E1
90381F80F990387E003D49131FD803F81307485A49130348481301121F123F5B127FA290
C7FCA25AAA7E7FA2123FA26C7E000F14037F000714076C6C497E6C6C497ED8007C017913
F890383F01F190380FFFC1903A01FE01FC002D407DBE33>100 D<EB01FE90380FFFC090
383F03F09038FC01F848486C7E4848137E48487F000F158049131F001F15C04848130FA2
127F16E090C7FCA25AA290B6FCA290C9FCA67EA27F123F16E06C7E1501000F15C06C6C13
036DEB07806C6C1400C66C131E017E5B90381F80F8903807FFE0010090C7FC232A7EA828
>I<EA01FC12FFA3120712031201B1EC01FE913807FFC091381E07E091387803F09138E0
01F8D9FDC07F148001FF6D7E91C7FCA25BA25BB3A6486C497EB5D8F87F13FCA32E3F7DBE
33>104 D<EA01E0EA07F8A2487EA46C5AA2EA01E0C8FCACEA01FC127FA3120712031201
B3AC487EB512F0A3143E7DBD1A>I<EA01FC12FFA3120712031201B3B3B1487EB512F8A3
153F7DBE1A>108 D<3901F801FE00FF903807FFC091381E07E091387803F000079038E0
01F82603F9C07F0001138001FB6D7E91C7FC13FF5BA25BB3A6486C497EB5D8F87F13FCA3
2E287DA733>110 D<14FF010713E090381F81F890387E007E01F8131F4848EB0F804848
EB07C04848EB03E0000F15F04848EB01F8A2003F15FCA248C812FEA44815FFA96C15FEA3
6C6CEB01FCA3001F15F86C6CEB03F0A26C6CEB07E06C6CEB0FC06C6CEB1F80D8007EEB7E
0090383F81FC90380FFFF0010090C7FC282A7EA82D>I<3901F807E000FFEB1FF8EC787C
ECE1FE3807F9C100031381EA01FB1401EC00FC01FF1330491300A35BB3A5487EB512FEA3
1F287EA724>114 D<90383FC0603901FFF8E03807C03F381F000F003E1307003C130312
7C0078130112F81400A27E7E7E6D1300EA7FF8EBFFC06C13F86C13FE6C7F6C1480000114
C0D8003F13E0010313F0EB001FEC0FF800E01303A214017E1400A27E15F07E14016C14E0
6CEB03C0903880078039F3E01F0038E0FFFC38C01FE01D2A7DA824>I<131CA6133CA413
7CA213FCA2120112031207001FB512C0B6FCA2D801FCC7FCB3A215E0A912009038FE01C0
A2EB7F03013F138090381F8700EB07FEEB01F81B397EB723>I<B539E00FFFE0A32707FE
000313006C48EB01FC6F5A00015D7F00005DA2017F495AA2EC8003013F5CA26D6C48C7FC
A26E5A010F130EA26D6C5AA2ECF83C01031338A26D6C5AA2ECFEF001005BA2EC7FC0A36E
5AA36EC8FCA2140EA2141E141C143C1438A2147800181370127EB45BA2495AA248485AD8
7E07C9FCEA780EEA3C3CEA1FF8EA07E02B3A7EA630>121 D E /Fi
11 62 df<EC0380B3A4B812FCA3C7D80380C7FCB3A42E2F7CA737>43
D<EB3FC0EBFFF03803E07C48487E48487E497E001EEB0780A2003E14C0A248EB03E0A500
FC14F0B0007C14E0A3007E1307003E14C0A36CEB0F806C14006D5A3807C03E3803F0FC38
00FFF0EB3FC01C2D7DAB23>48 D<130C133C137CEA03FC12FFEAFC7C1200B3B113FE387F
FFFEA2172C7AAB23>I<EB7F803801FFF0380780FC380E003F48EB1F8048EB0FC05A0060
EB07E012F000FC14F07E1403A3007C1307C7FCA215E0140F15C0141F1580EC3F00147E14
7C5C495A495A495A495A011EC7FC5B5B4913305B485A4848136048C7FC000E14E0001FB5
FC5A4814C0B6FCA21C2C7DAB23>I<EB3FC03801FFF03807C0FC380E007E487FEC1F8000
3F14C0A2EB800F1300A2000C131FC7FC1580A2EC3F00143E5C5CEB03F0EBFFC014F0EB00
FC143FEC1F8015C0140F15E0A2EC07F0A21238127C12FEA3EC0FE012F8006014C0007013
1F6C1480001EEB3F00380780FC3801FFF038007FC01C2D7DAB23>I<140EA2141E143EA2
147E14FEA2EB01BE1303143E1306130E130C131813381330136013E013C0EA0180120313
001206120E120C5A123812305A12E0B612FCA2C7EA3E00A9147F90381FFFFCA21E2D7EAC
23>I<000CEB0180380FC01F90B512005C5C14F014C0D80C7EC7FC90C8FCA8EB1FC0EB7F
F8380DE07C380F801F01001380000E130F000CEB07C0C713E0A2140315F0A4127812FCA4
48EB07E012E0006014C00070130F6C14806CEB1F006C133E380780F83801FFE038007F80
1C2D7DAB23>I<EB03F8EB0FFE90383E0780EBF8013901F007C03803E00FEA07C0EA0F80
A2391F00078091C7FC123EA2127EA2127CEB0FC038FC3FF0EBF07C38FDC01EB4487E0100
1380EC07C04814E0A214034814F0A4127CA3127EA2003E14E01407121E001F14C06CEB0F
803907801F003803C03E6C6C5A38007FF0EB1FC01C2D7DAB23>I<1230123C003FB512F8
A215F05A15E039700001C000601480140348EB0700140E140CC7121C5C143014705C495A
A2495AA249C7FCA25B130E131EA2133EA3133C137CA413FCA913781D2E7CAC23>I<EB1F
C0EBFFF03803E07C3807801E48487E001EEB0780A248EB03C0A4123E1407003F1480381F
C00F01E01300EBF81E6C6C5A3807FFF86C13E0C6FCEB3FF8EBFFFC3803C7FFD807831380
D81F0013C0001E133F48EB1FE0007C13070078EB03F012F84813011400A46C14E0007813
01007C14C0003C13036CEB0780390F800F003807E03C3801FFF038003FC01C2D7DAB23>
I<007FB712F8B812FCA2CBFCADB812FCA26C16F82E137C9937>61
D E /Fj 12 120 df<EB01FCEB0FFF90383F07C090387C03E03A01F801F00CEA03F03907
E000F84848141C49EBFC18001F147C48C713381630481570007E156016E016C000FE147D
48EC7F801600157EA2157CA2127C15FE0203130C6CEB073E6C011E131C3A0F81F81F383A
03FFE00FF03A00FE0003C0261F7D9D2D>11 D<123C127EB4FCA21380A2127F123D1201A3
12031300A25A1206120E5A5A5A126009157A8714>59 D<124012F012FC127FEA1FC0EA07
F0EA01FCEA007FEB1FC0EB07F0EB01FCEB007FEC1FC0EC07F0EC01FCEC007FED1FC0ED07
F0ED01FCED007FEE1FC01607161FEE7F00ED01FCED07F0ED1FC0037FC7FCEC01FCEC07F0
EC1FC0027FC8FCEB01FCEB07F0EB1FC0017FC9FCEA01FCEA07F0EA1FC0007FCAFC12FC12
F012402A2B7AA537>62 D<B500C090380FFFC0A2D807F8C73801FC006C48EC00F05F4C5A
5F6D4AC7FC120116065EA25E6D5C12005E5EA24B5A6D49C8FCA2017E13065DA25D017F5B
A26D5B5DA24A5A0283C9FCA2EB1F86148CA2149814F0A26D5A5CA25C91CAFCA21306322E
7CAC29>86 D<1307EB0F80EB1FC0A2EB0F80EB070090C7FCA9EA01E0EA07F8EA0E3CEA1C
3E123812301270EA607EEAE07C12C013FC485A120012015B12035BA21207EBC04014C012
0F13801381381F01801303EB0700EA0F06131EEA07F8EA01F0122E7EAC18>105
D<15E0EC01F01403A3EC01C091C7FCA9147CEB03FE9038078F80EB0E07131C013813C013
30EB700F0160138013E013C0EB801F13001500A25CA2143EA2147EA2147CA214FCA25CA2
1301A25CA21303A25CA2130700385BEAFC0F5C49C7FCEAF83EEAF0F8EA7FF0EA1F801C3B
81AC1D>I<131FEA03FFA2EA003FA2133EA2137EA2137CA213FCA25BA2120115F89038F0
03FCEC0F0E0003EB1C1EEC387EEBE07014E03807E1C09038E3803849C7FC13CEEA0FDC13
F8A2EBFF80381F9FE0EB83F0EB01F81300481404150C123EA2007E141C1518007CEBF038
ECF83000FC1470EC78E048EB3FC00070EB0F801F2F7DAD25>I<27078007F0137E3C1FE0
1FFC03FF803C18F0781F0783E03B3878E00F1E01263079C001B87F26707F8013B0006001
0013F001FE14E000E015C0485A4914800081021F130300015F491400A200034A13076049
133E170F0007027EEC8080188149017C131F1801000F02FCEB3F03053E130049495C180E
001F0101EC1E0C183C010049EB0FF0000E6D48EB03E0391F7E9D3E>109
D<3907C007E0391FE03FF83918F8783E393879E01E39307B801F38707F00126013FEEAE0
FC12C05B00815C0001143E5BA20003147E157C5B15FC0007ECF8081618EBC00115F0000F
1538913803E0300180147016E0001F010113C015E390C7EAFF00000E143E251F7E9D2B>
I<3807C01F390FF07FC0391CF8E0E0383879C138307B8738707F07EA607E13FC00E0EB03
804848C7FCA2128112015BA21203A25BA21207A25BA2120FA25BA2121FA290C8FC120E1B
1F7E9D20>114 D<D801E01370D807F813F8380E3C01D81C3E13FC123800301300007014
7CEA607ED8E07C133812C013FC485A0000143012015B1570000314605B15E015C01207EB
C00115801403EC070000031306EBE00E00015BEBF07838007FE0EB1F801E1F7E9D22>
118 D<D801E01570D807F890381C01F8D80E3C133ED81C3E017E13FC0038147C00301500
0070167CD8607E01FC1378D8E07C49133812C013FC3880F8010000163000015C13F00203
14700003166001E05BA217E00007010714C001C0EBC00117801603000316006D486C5A16
0E3A01F01DF01C3A00F838F83890397FF07FF090390FC00FC02E1F7E9D33>I
E /Fk 11 90 df<EE01E01603EE07C0EE0F80161F1700163E5E5E15015E4B5A15074B5A
5E151F4BC7FC153E157E5DA24A5A14035D14075D140F5D141F5D143F92C8FC5C147E14FE
5C1301A25C13035C1307A25C130FA2495AA3495AA3137F91C9FCA25B5BA312015BA31203
A25BA21207A35BA2120FA35BA3121FA45BA2123FA75B127FAC90CAFC5AB3B3A27E7FAC12
3F7FA7121FA27FA4120FA37FA31207A27FA31203A27FA21201A37F1200A37F7FA280133F
A36D7EA36D7EA2130780A2130380130180A2130080147E147F8081141F81140F81140781
14038114016E7EA2157E153E153F6F7E150F826F7E15036F7E821500167C82821780160F
EE07C0EE03E016012BF86C8242>32 D<12F07E127C7E123F7E6C7E6C7E6C7E7F12016C7E
7F137E133E133F6D7E130F806D7EA26D7E80130180130080147E147F8081141F81140F81
140781A2140381140181A2140081A2157FA36F7EA382151FA282150FA3821507A382A215
03A282A31501A282A31500A382A482A21780A7163F17C0AC161F17E0B3B3A217C0163FAC
1780167FA71700A25EA45EA31501A35EA21503A35EA21507A25EA3150F5EA3151F5EA215
3F5EA34BC7FCA315FEA25D1401A25D14035D1407A25D140F5D141F5D143F92C8FC5C147E
14FE5C13015C13035C495AA2495A5C131F49C9FC133E137E5B5B485A12035B485A485A48
CAFC5A123E5A5A5A2BF87E8242>I<177C17FCEE01F8A2EE03F0EE07E0EE0FC0A2EE1F80
EE3F005E167E5E15015E15034B5A5E150F5E151F4B5AA24BC7FCA215FEA24A5AA24A5AA2
4A5AA2140F5D141F5D143F5DA2147F92C8FC5CA25C13015C1303A25C1307A3495AA3495A
A3133F5CA3137F5CA313FF91C9FCA35A5BA31203A25BA31207A35BA3120FA45BA2121FA6
5BA2123FA85BA2127FAE5B12FFB3A62E95688149>48 D<12F87E127EA27E6C7E6C7EA26C
7E6C7E7F12016C7E7F137E137F6D7E131F80130F806D7EA26D7EA26D7EA26D7EA2147FA2
6E7EA281141F81140F811407A281140381A2140181140081A28182A36F7EA36F7EA38215
0FA3821507A3821503A3821501A382A281A31780A3167FA317C0A4163FA217E0A6161FA2
17F0A8160FA217F8AE160717FCB3A62E957E8149>I<B47EB3A6127F7FAE123FA27FA812
1FA27FA6120FA27FA41207A37FA31203A37FA21201A37F7EA380137FA380133FA380131F
A36D7EA36D7EA3130380A2130180130080A28081143FA281141F81140F811407A26E7EA2
6E7EA26E7EA2157FA26F7EA26F7E150F821507826F7E1501821500167E167F82EE1F80EE
0FC0A2EE07E0EE03F0EE01F8A2EE00FC177C2E95688349>64 D<EE07FCB3A617F8160FAE
17F0A2161FA817E0A2163FA617C0A2167FA41780A316FFA31700A35DA25EA315035EA315
075EA3150F5EA3151F5EA34B5AA34B5AA393C7FC5DA25D14015D1403A25D14075DA2140F
5D141F5D143F5DA24AC8FCA214FEA2495AA2495AA2495AA2495A5C131F5C133F49C9FC13
7E13FE5B485A12035B485A485AA2485A48CAFC127EA25A5A2E957E8349>I<EAFF80B3B3
B00934688049>I<EAFF80B3B3B00934598049>I<0078EF078000FCEF0FC0B3B3B3A46C17
1F007E1880A2007F173F6C1800A26D5E001F177E6D16FE6C6C4B5A6D15036C6C4B5A6C6C
4B5A6C6C4B5A6C6C6CEC7FC06D6C4A5AD93FF8010790C7FC6DB4EB3FFE6D90B55A010315
F06D5D6D6C1480020F01FCC8FC020113E03A537B7F45>83 D<BF12E08AA38A6C90CCFC09
00806C6D19076C6D07007F6C6D1A1F1D076C6DF201FF6C6D747E6C6DF33F801E0F6C6D1B
076D6CF303C06D6D1A01F600E06D7F6D6D1B706D1D30816D6D1B186D6D1B007F816E7E6E
7FA26E7F6E7F6E7FA26E7F6E7F6E7FA26F7E6F7F6F7FA26F7F6F7F81836F7F6F7F167F83
707F707F8284707F707FA2707F82715A60173F715A604D5A4DCDFC17FEA24C5A4C5A4C5A
4C5A4C5A5F163F4CCEFC16FE4B5A4B5A4B5AA24B5A4B5A4B5A4BCFFC15FEA24A5A4A5A4A
481B184A481B304A5A4B1B70023F1C604ACF12E002FE1B014948F303C049481B074948F3
0F801E1F49481B7F4948F3FF0049481A0349CE120F01FEF37FFEF403FF48481A7F484807
7FB55A48BEFC48655AA248655ABFFC666D747B7F78>88 D<BE12FEA5000302E0C9000F14
80C66CF2FC00011F1AF06D626D62A26D62B3B3B3B3B3A4496D4C7FA2496D4C7F496D4C7F
017F01FF4BB512FC0003B600E0020FECFF80B8D88003B712FEA55F747B7F6A>I
E /Fl 5 51 df<B812C0A32A037A9137>0 D<130C131EA50060EB01800078130739FC0C
0FC0007FEB3F80393F8C7F003807CCF83801FFE038007F80011EC7FCEB7F803801FFE038
07CCF8383F8C7F397F0C3F8000FCEB0FC039781E078000601301000090C7FCA5130C1A1D
7C9E23>3 D<137813FE1201A3120313FCA3EA07F8A313F0A2EA0FE0A313C0121F1380A3
EA3F00A3123E127E127CA35AA35A0F227EA413>48 D<D93F80EC07F0D9FFF0EC3FFC0003
01FC91B5FC4801FF903901F80780D80F80903A8007C001C03D1E003FC00F8000E0486D6C
48C71270003890260FF03E143048902607F83C14386E6C48141800606D6C5A00E06D6C48
141C48027F150C5E153F6F7E6F7E82151F6C6F141C0060DA3DFE1418DB78FF143800704A
6C7E003001016D6C1370003849486C6C13F06C903B07C00FF001E06C903B0F8007FC07C0
2807807E0003B512806CB44801001400C601F0EC3FFCD93F80EC07F03E1F7C9D47>I<91
B512C01307131FD97F80C7FC01FCC8FCEA01F0EA03C0485A48C9FC120E121E5A12381278
1270A212F05AA3B712C0A300E0C9FCA37E1270A212781238123C7E120E120F6C7E6C7EEA
01F0EA00FCEB7F80011FB512C013071300222B7AA52F>I E /Fm
20 113 df<007FB912E0BA12F0A26C18E03C04789A4D>0 D<0060160600F8160F6C161F
007E163F6C167E6C6C15FC6C6CEC01F86C6CEC03F06C6CEC07E06C6CEC0FC06C6CEC1F80
017EEC3F006D147E6D6C5B6D6C485A6D6C485A6D6C485A6D6C485A6D6C485ADA7E3FC7FC
EC3F7E6E5A6E5A6E5AA24A7E4A7EEC3F7EEC7E3F4A6C7E49486C7E49486C7E49486C7E49
486C7E49486C7E49C7127E017E8049EC1F804848EC0FC04848EC07E04848EC03F04848EC
01F84848EC00FC48C9127E007E163F48161F48160F00601606303072B04D>2
D<49B4FC010F13E0013F13F8497F3901FF01FF3A03F8003F80D807E0EB0FC04848EB07E0
4848EB03F090C71201003EEC00F8007E15FC007C157C0078153C00F8153EA248151EA66C
153EA20078153C007C157C007E15FC003E15F86CEC01F06D13036C6CEB07E06C6CEB0FC0
D803F8EB3F803A01FF01FF0039007FFFFC6D5B010F13E0010190C7FC27267BAB32>14
D<037FB612E00207B712F0143F91B812E0010301C0C9FCD907FCCAFCEB0FE0EB3F8049CB
FC13FC485A485A485A5B485A121F90CCFC123EA2123C127CA2127812F8A25AA87EA21278
127CA2123C123EA27E7F120F6C7E7F6C7E6C7E6C7E137E6D7EEB1FE0EB07FC6DB47E0100
90B712E0023F16F01407020016E092CAFCB0001FB912E04818F0A26C18E03C4E78BE4D>
18 D<19E0F003F0180FF03FE0F0FF80943803FE00EF0FF8EF3FE0EFFF80DC03FEC7FCEE
0FF8EE3FE0EEFF80DB03FEC8FCED1FF8ED7FE0913801FF80DA07FEC9FCEC1FF0EC7FC049
48CAFCEB07FCEB1FF0EB7FC04848CBFCEA07FCEA1FF0EA7FC048CCFCA2EA7FC0EA1FF0EA
07FCEA01FF38007FC0EB1FF0EB07FCEB01FF9038007FC0EC1FF0EC07FC913801FF809138
007FE0ED1FF8ED07FE923800FF80EE3FE0EE0FF8EE03FE933800FF80EF3FE0EF0FF8EF03
FE943800FF80F03FE0F00FF01803F000E01900B0007FB912E0BA12F0A26C18E03C4E78BE
4D>20 D<127012FCB4FCEA7FC0EA1FF0EA07FCEA01FF38007FC0EB1FF0EB07FCEB01FF90
38007FC0EC1FF0EC07FC913801FF809138007FE0ED1FF8ED07FE923800FF80EE3FE0EE0F
F8EE03FE933800FF80EF3FE0EF0FF8EF03FE943800FF80F03FE0F00FF0A2F03FE0F0FF80
943803FE00EF0FF8EF3FE0EFFF80DC03FEC7FCEE0FF8EE3FE0EEFF80DB03FEC8FCED1FF8
ED7FE0913801FF80DA07FEC9FCEC1FF0EC7FC04948CAFCEB07FCEB1FF0EB7FC04848CBFC
EA07FCEA1FF0EA7FC048CCFC12FC1270CDFCB0007FB912E0BA12F0A26C18E03C4E78BE4D
>I<1AF0A3861A78A21A7C1A3CA21A3E1A1E1A1F747EA2747E747E87747E747E1B7E8775
7EF30FE0F303F8007FBC12FEBE1280A26CF3FE00CEEA03F8F30FE0F31F8051C7FC1B7E63
505A505A63505A505AA250C8FC1A1E1A3E1A3CA21A7C1A78A21AF862A359347BB264>33
D<18034E7E85180385180185727E1978197C8585737E86737E737E007FBA7EBB7E866C85
CDEA0FC0747EF203F8F200FEF37F80F31FE0F307FC983801FF80A2983807FC00F31FE0F3
7F8009FEC7FCF203F8F207E0505A007FBBC8FCBB5A626C61CCEA03F04F5A4F5A624FC9FC
193E61197819F84E5A6118036118076172CAFC59387BB464>41 D<031CED01C0033E4B7E
033C1501037C820378150003F8824B16780201177C4B163C0203173E4A48824B82020F84
4ACA6C7E023E717E027E8491BA7E498549854985D90FC0CBEA1F804948727E017FCCEA07
F001FCF101F8D803F8F100FED80FE0F23F80D83FC0F21FE0B4CEEA07F8A2D83FC0F21FE0
D80FE0F23F80D803F8F2FE00C66CF101F8017FF107F0D91F80F00FC06D6C4E5A6DBBC7FC
6D616D616D61027ECAEA03F0023E606E4D5A6E6C4C5A020795C8FC6F5E6E6C163E020117
3C6F167C020017786F16F803785E037C1501033C5E033E1503031C6F5A5D387DB464>44
D<92B6FC02071580143F91B7120001030180C8FCD907FCC9FCEB1FE0EB3F80017ECAFC5B
485A485A485A5B485A121F90CBFC123EA2123C127CA2127812F8A25AA2B9FC1880A21800
00F0CBFCA27EA21278127CA2123C123EA27E7F120F6C7E7F6C7E6C7E6C7E137E6D7EEB1F
E0EB07FC6DB47E010090B6FC023F1580140702001500313A78B542>50
D<0060171800F0173C6C177CA200781778007C17F8A2003C17F0003E1601A26CEE03E0A2
6C17C06D1507A2000717806D150FA26C6CED1F00A20001161E6D153EA20000163C90B712
FCA26D5DA2013CC85A013E1401A2011E5D011F1403A26D5D6E1307A26D6C495AA2010392
C7FC6E5BA20101141E6E133EA26D6C5BA202781378027C13F8A2023C5BEC3E01A26E485A
A2020F5B1587A202075B15CFA26EB4C8FCA26E5AA36E5AA315781530364780C437>56
D<007FB712E0B812F0A27ECAFCB3AA001FB7FC127FA3CAFCB3AB007FB7FCB8FCA26C16E0
2C457BC437>I<0060170C00F0171EB3B3A66C173EA20078173C007C177C007E17FC003E
17F86CEE01F06D15036C6CED07E06C6CED0FC0D803F8ED3F80D801FEEDFF0026007FC0EB
07FCD93FFCEB7FF8010FB612E001031580D9007F01FCC7FC020713C0373D7BBA42>91
D<913807FFC0027F13FC0103B67E010F15E0903A3FFC007FF8D97FC0EB07FCD801FEC8B4
FCD803F8ED3F80D807E0ED0FC04848ED07E04848ED03F090C91201003EEE00F8007E17FC
007C177C0078173C00F8173EA248171EB3B3A60060170C373D7BBA42>I<1538157CA215
FEA24A7EA215EF02037FA2913807C7C0A291380F83E0A291381F01F0A2EC1E00023E7FA2
4A137CA24A7FA249487FA24A7F010381A249486D7EA249486D7EA249C76C7EA2011E1400
013E81A249157CA24981A2484881A24848ED0F80A2491507000717C0A24848ED03E0A248
C9EA01F0A2003EEE00F8A2003C1778007C177CA248173EA248171E0060170C373D7BBA42
>94 D<0060170C00F0171E6C173EA2007C177CA2003C1778003E17F8A26CEE01F0A26C6C
ED03E0A26C6CED07C0A2000317806D150FA26C6CED1F00A26C6C153EA2017C5DA26D5DA2
011E5D011F1401A26D6C495AA26D6C495AA26D6C495AA2010192C7FC6E5BA26D6C133EA2
027C5BA26E5BA2021E5BEC1F01A291380F83E0A2913807C7C0A2913803EF80A2020190C8
FC15FFA26E5AA2157CA21538373D7BBA42>I<ED0FE015FF913803FC00EC0FE0EC3FC04A
5A4AC7FC5C495AA2495AB3AD495AA2495A131F495A495A01FEC8FCEA07F8EAFFE0A2EA07
F8EA00FEEB7F806D7E6D7E130F6D7EA26D7EB3AD6D7EA26D7E806E7E6E7EEC0FE0EC03FC
913800FFE0150F236479CA32>102 D<12FEEAFFE0EA07F8EA00FEEB7F806D7E6D7E130F
6D7EA26D7EB3AD6D7EA26D7E806E7E6E7EEC0FE0EC03FC913800FFE0A2913803FC00EC0F
E0EC3FC04A5A4AC7FC5C495AA2495AB3AD495AA2495A131F495A495A01FEC8FCEA07F8EA
FFE048C9FC236479CA32>I<126012F0B3B3B3B3B3A81260046474CA1C>106
D<1B0C1B1E1B3EA21B7CA21BF8A2F201F0A2F203E0A2F207C0A2F20F80A2F21F00A21A3E
A262A262A24F5AA2621903A24F5AA24F5AA24FC7FCA2193EA261A261A24E5AA24E5AA24E
5AA24E5AA2010C4CC8FC133C017C163EEA01FE00035F487E001E5F00387FD8707F4B5A00
E07FD8003F4B5A80011F4B5AA26E4A5A130F6E4AC9FC13076E143E13036E5C13016E5C7F
6F5B027F1301A26F485A143F6F485A141F6F485A140F6F48CAFC1407EDFC3E14035E15FE
02015B15FF6E5BA26F5AA26F5AA26F5AA26FCBFC150E4F647A8353>112
D E /Fn 40 123 df<EC03FCEC1FFF9138FE07C0903903F001F049486C7ED91FC06D130E
4948137C49C76C130C01FE143F4848161C48486E131800071680491638000F1730484816
70EFC060485A18E0040F13C0484815C1188017C300FFEEC70090C813C617CE17DCEE1FD8
4816F85F5F5FA5007E153F167F6C03EF1338ED03CF6C6CD90F0713306C6C011C14706C6C
9039F803E0E03C01F00FE001E1C026007FFFC7EAFF80D91FF0EC3E00372D7CAB3E>11
D<1578913807FFE0021F13FC91383C7FFEEC7007EC6003ECE0004A13381600A280A380A2
80147CA2147E143E143F816E7EA26E7E81140781EC3FFC14FF903803E1FEEB07C190381F
00FF133E49EB7F805B0001143F485A484814C049131F120F485AA248C7FC150F5A127EA3
00FEEC1F805AA316005A5DA2153E157E157CA26C5C127C4A5A6C495AA26C495A6C6C485A
6C6C48C7FC3803E07C3800FFF0EB1FC027487CC62B>14 D<121EEA7F80A2EAFFC0A4EA7F
80A2EA1E000A0A78891B>58 D<121EEA7F8012FF13C0A213E0A3127FEA1E601200A413E0
13C0A312011380120313005A1206120E5A5A5A12600B1D78891B>I<1618163C167CA216
7816F8A216F01501A216E01503A216C01507A21680150FA2ED1F00A2151E153EA2153C15
7CA2157815F8A25D1401A24A5AA25D1407A25D140FA292C7FC5CA2141E143EA2143C147C
A25CA25C1301A25C1303A25C1307A25C130FA291C8FC5BA2133EA2133C137CA2137813F8
A25B1201A25B1203A2485AA25B120FA290C9FC5AA2121E123EA2123C127CA2127812F8A2
5A126026647BCA31>61 D<1830187018F0A217011703A24D7EA2170F171FA21737A21767
17E717C793380187FCA2EE0307EE07031606160CA216181638163004607FA216C0030113
011680ED0300A21506150E150C5D845D03707F15605DA24A5A4AB7FCA25C0206C87F5C02
1C157F14185CA25C14E05C495A8549C9FC49163F1306130E5B133C137C01FE4C7ED807FF
ED01FF007F01F0027FEBFFC0B5FC5C42477DC649>65 D<91B87E19F019FC02009039C000
03FF6F480100138003FFED3FC01AE093C8121FF10FF0A24A17F84B1507A314035D190FA2
020717F04B151F1AE0193F020F17C04BED7F80F1FF004E5A021F4B5A4B4A5AF01FF0F03F
C0023F4AB4C7FC4BEB1FFC92B612F018FEDA7FC0C7EA7F804BEC1FC0F00FF0727E02FF6F
7E92C8FC727EA249835CA313035CA301075F4A1503A24E5A130F4A4B5A4E5AA2011F4C5A
4A4B5A4D485A013F4B48C7FCEF0FFC4AEC3FF801FF913801FFE0B9128005FCC8FC17C045
447CC34A>I<4CB46C1318043F01F013384BB512FC0307D9007E1378DB1FF090380F80F0
DB7F80EB03C1DA01FEC7EA01C34A48EC00E7DA0FF0ED7FE04A48153F4A5A02FFC9121F49
4817C04948160F495A130F4A178049481607495A137F4948170091CAFC5A485A1906485A
A2485A96C7FC121F5BA2123F5BA3127F5BA4485AA419C0A2180161127F180396C7FC6018
066C6C160E601818001F17386D5E000F5F6D4B5A6C6C4B5A00034CC8FC6C6C150E6C6C15
3C017F5DD93FC0EB01E0D91FF0EB0FC0D907FE017FC9FC0101B512FCD9003F13E0020790
CAFC45487CC546>I<91B912FCA3020001C0C7123F6F48EC03F803FF1501190093C91278
A21A385C5DA3020317305DA314074B1460A218E0020F4B13005DA21701021F5D4B130317
07170F023F027FC8FC92B6FCA391397FC0007E4B131EA2170E02FF140C92C7FCA2171C49
031813035C611906010392C7FC4A160E190C191C010717184A163819301970130F4A5E18
0161011F16034A15074E5A013F163F4EC7FC4AEC03FF01FFED3FFEB9FCA26046447CC348
>69 D<91B912F8A3020001C0C7123F6F48EC07F003FF1503190193C9FCA21A705C5DA302
0317605DA314075D18C01701020F4B13005DA21703021F92C8FC4B5BA25F023F141E4B13
FE92B5FCA24A5CED8000173CA202FF141892C7FCA217384915305CA21770010315604A91
C9FCA313075CA3130F5CA3131F5CA2133FA313FFB612F8A345447CC33F>I<4CB46C1318
043F01F013384BB512FC0307D9007E1378DB1FF090380F80F0DB7F80EB03C1DA01FEC7EA
01C34A48EC00E7DA0FF0ED7FE04A48153F4A5A02FFC9121F494817C04948160F495A130F
4A178049481607495A137F4948170091CAFC5A485A1906485AA2485A96C7FC121F5BA212
3F5BA3127F5BA4485A4CB612805EA293C7EBE000725AA3007F60A218FF96C7FCA26C7E5F
606C7EA2000F16036D5E6C6C15070003160F6C6C151F6C6CED3DF8D97F8014786D6CEB01
E0D91FF0903807C078D907FE90387F00700101B500FC1330D9003F01F090C8FC020790CA
FC45487CC54D>I<027FB512F8A217F09139007FF000ED3FC0157FA25EA315FF93C7FCA3
5C5DA314035DA314075DA3140F5DA3141F5DA3143F5DA3147F5DA314FF92C8FCA35B5CA3
13035CA313075CA3130F5CA2131FA25CEB7FF0007FB512F0B6FCA22D447DC32B>73
D<91B612F8A3020001E0C8FC6F5A4B5AA293C9FCA35C5DA314035DA314075DA3140F5DA3
141F5DA3143F5DA3147F5DA314FF92CAFCA35B4A16C0A21801010317804A15031900A201
075E4A1506180E181E010F161C4A153C18381878011F16F84A4A5A1703013F150F4D5A4A
14FF01FF02075BB9FCA2603A447CC342>76 D<91B500C0933803FFFE63630200F1FE00DB
6FE0EE1BF803EF171F1B3703CFEF67F0A21BCF0201EF018F038F60DB87F0ED030F1B1F02
0317060307040C5BA2F2183F020717300206616F6C15601B7F020E17C0020CDC018090C7
FCA24F485A021C16060218606F6C5C1A0102381618023004305BA2F16003027016C00260
606F6CEB01801A0702E0ED03004A03065CA24E130F01015E4A60047F5B1A1F01035E91C7
4A5CA24D48133F494BC7FC010661EE3F861A7F010E158C010C039892C8FCA205B05C011C
15E001186001386E5A190101785D01FC92C75BD803FFEF07FEB500F8011E0107B512FE16
1C160C5F447BC35E>I<EE03FF047F13F0923901FC01FC92390FE0007F033FC7EA1FC003
FEEC07E0DA01F86E7EDA07F06E7EDA0FC06E7E4A4881027FC9127E02FE167F4948824948
1780495A010FEF1FC05C495A494817E0137F91CAFC5B4848170FF11FF0485AA2485AA212
0F5B001F19E0A249173F123FA34848EF7FC0A3F1FF80A2485A4E1300A34E5AA24E5A6118
0F007F60181F614E5A4E5A6C7E4EC7FC4D5A001F4C5A6D4B5A000F5F6C6C4B5AEF3F806C
6C4BC8FC6C6C15FE6C6CEC01F8017FEC07F06D6CEB1FC0D90FE0017FC9FC903903F803FC
0100B512E0DA0FFECAFC44487CC54B>79 D<91B712F018FF19E002009039C0003FF86F48
EB07FC03FFEC01FEF0007F93C8EA3F801AC0F11FE05C5D1AF0A214035DA30207EE3FE05D
A2F17FC0020F17804B15FF1A004E5A021F4B5A4B4A5AF00FE04E5A023F037FC7FC4BEB03
FCEF1FF092B612804A4AC8FC923980007F80EF0FC0EF07F002FF6E7E92C77F1701845B4A
1400A2170113035CA2170313075CA24D5A130F5CA3011F18185CA2013F4C13381A304A6F
1370D9FFE0020314E0B600E0ED01C00501EB0380943900FE0F00CBEA3FFEF007F045467C
C34A>82 D<9339FF8001800307EBF003033F13FC9239FF007E07DA01F8EB0F0FDA07E090
38079F004A486DB4FC4AC77E023E804A5D187E5C495A183C495AA213074A1538A3130F18
3080A295C7FC806D7E8014FF6D13E015FC6DEBFFC06D14FC6E13FF6E14C0020F80020314
F8EC003F03077F9238007FFE160F1603707E8283A283A21206A4000E163EA2120C177E00
1E167CA25F5F003F15014C5A6D4A5A4C5A486C4AC8FC6D143ED87CF85CD8787E495A3AF0
1FC00FE0D8E007B51280010149C9FC39C0003FF039487BC53C>I<48BA12C05AA291C7D9
80001380D807F092C7121F4949150F0180170748C75B1903120E48020316005E12181238
003014074C5C00701806126000E0140F485DA3C8001F92C7FC5EA3153F5EA3157F5EA315
FF93CAFCA35C5DA314035DA314075DA3140F5DA3141F5DA3143F5DA2147FA214FF01037F
001FB612FCA25E42447EC339>I<007FB56C91381FFFF8B65DA2000101E0C8000313006C
0180ED01FCF000F0614E5AA2017F4C5A96C7FC1806A2606E5DA2013F5E1870186060A24D
5A6E4AC8FCA2011F1506170E170C5FA26E5C5FA2010F5D16015F4CC9FCA26E13065EA201
075C5EA25E16E06E5B4B5A13034BCAFC1506A25D151CECFE185D13015D5DA26E5AA292CB
FC5C13005C5CA25CA25C45467BC339>86 D<023FB500E0011FB5FCA39126007FFEC70003
13E0DB3FF8913801FE006F486E5A1AF06F6C4A5A626F6C4A5A0706C7FC190E6F6C5C616F
6C5C6171485A6F5D4EC8FC93387FC00660706C5A6060706C5A17F193380FFB8005FFC9FC
5F705AA2707EA3707E5E04067F5E93381C7FC0163816704C6C7EED01C04B486C7E160015
064B6D7E5D4B6D7E5D5D4A486D7E14034AC76C7E140E5C4A6E7F143002E06F7E495A0103
707E495A131F496C4B7E2603FFE04A487E007F01FC021FEBFFF0B5FCA250447EC351>88
D<B66C91381FFFFCA21AF8000101E0C8000313806C49923801FC004A16F06D6C5E4E5A61
6D6C4BC7FC180E606D6C1518606E5D010F5E4D5A6D6C14034DC8FC17066D6C5C5F5F6D6C
5C17E04C5A6D01805B4CC9FCEDC006027F5B5EEDE038023F5B16606E6C5AEDF18003F3CA
FCEC0FFEA25D6E5A5D140FA35D141FA35D143FA35D147FA392CBFC5CA3495AA3EB07FF00
07B6FCA25D46447CC339>I<EC07F8EC3FFF9138FC07C0903903F000E049481370D91F80
133049C71270017EEB03F801FE1307485A4848EB0FF012075B000FEC07C0484890C7FCA2
485AA2127F5BA312FF90C9FCA45AA5161816381670007E15E0ED01C06CEC0380ED07006C
6C131E000F14383907C001F03903F00FC02600FFFEC7FCEB1FF0252D7CAB2A>99
D<EE01FC16FFA3EE03F816011603A217F0A21607A217E0A2160FA217C0A2161FA21780A2
163FA21700EC0FC091387FF07F903801F838903907E01C7E90380FC00E90393F0007FE49
130301FE5C485A491301120348485C120F491303121F5E485A1507127F495CA2150F12FF
90C75BA2151FA2485DA2033F13301770EE0060A24B13E017C015FE007E13010203130100
3ED9073E1380003F010E13036C011C14006C6C486C5A3A07C0F00F0E3A01FFC007FC3A00
7F0001F02E467CC433>I<EC07F8EC3FFE903901FC0780903903F003C090390FC001E090
381F8000017FC7FC01FE1470485A484814F0000715E05B000F1401484814C015034848EB
0780ED1F0015FC007FEB1FF090B5128002F0C7FC0180C8FC12FF90C9FCA55AA41618007E
15381670007F15E06CEC01C0ED03806CEC07006C6C131E6D13383907E001F03901F00FC0
26007FFEC7FCEB1FF0252D7CAB2D>I<EE07E0EE1FF8EE7C1CEEF80E923801F03E923803
E07F17FFED07E116C117FE92380FC0FC177817004B5AA4153F93C7FCA45D157EA491B612
80A3DA00FCC7FCA314015DA414035DA414075DA4140F5DA5141F5DA4143F92C8FCA45C14
7EA45CA45C1301A25CA2EA1C03007F5B12FF5C13075C4848C9FC12F8EA601EEA783CEA1F
F0EA07C0305A7BC530>I<157E913803FF8091390FC1E0E091391F0073F0027E13334A13
3F4948131F010315E04948130F495AA2494814C0133F4A131F137F91C713805B163F5A49
1500A25E120349147EA216FEA2495CA21501A25EA21503150700015D150F0000141F6D13
3F017CEB77E090383E01E790381F078F903807FE0FD901F85B90C7FC151FA25EA2153FA2
93C7FCA2001C147E007F14FE485C4A5A140348495AEC0FC000F8495A007C01FEC8FC381F
FFF8000313C02C407EAB2F>I<141E143F5C5CA3147E143891C7FCAE133EEBFF803801C3
C0380781E0380601F0120E121CEA180312381230A2EA700700605BA2EAE00F00C05BEA00
1F5CA2133F91C7FCA25B137E13FE5BA212015BEC03800003140013F01207495A1406140E
140CEBC01C141814385C00035BEBE1C0C6B45A013EC7FC19437DC121>105
D<163C16FEA21501A316FCED00701600AE15FCEC03FF91380F0780021C13C091383803E0
147014E014C01301EC8007130314005B0106130F130E010C14C090C7FC151FA21680A215
3FA21600A25DA2157EA215FEA25DA21401A25DA21403A25DA21407A25DA2140FA25DA214
1F5DA2143F001C91C7FC127F48137E5CA248485AEB03E038F807C038781F80D83FFEC8FC
EA07F0275681C128>I<14FE137FA3EB01FC13001301A25CA21303A25CA21307A25CA213
0FA25CA2131FA25C163F013FECFFC0923803C0E09138000703ED1E0F491338ED701F017E
13E0EC01C001FE018013C00203EB07004948C8FC140E00015B5C495A5C3803FBC001FFC9
FC8014F83807F1FE9038F03F809038E00FE06E7E000F130381EBC001A2001FED01C01780
1380A2003F15031700010013F05E481506160E007E150C161C00FE01005BED787048EC3F
E00038EC0F802B467BC433>I<EB03F8EA01FFA3380007F013031307A214E0A2130FA214
C0A2131FA21480A2133FA21400A25BA2137EA213FEA25BA21201A25BA21203A25BA21207
A25BA2120FA25BA2121FA25BA2123FA290C7FCA248136014E0007E13C0A2130100FE1380
12FCA21303007C13005B1306EA3E0EEA1E1CEA0FF8EA03E015467CC41D>I<01F8D903FC
EC7F80D803FED91FFF903803FFE0D8071F903B7C0FC00F81F83E0E0F80E007E01C00FC00
1C9026C3C0030178137C271807C700D9F0E0137E02CE902601F1C0133E003801DCDAFB80
133F003001D892C7FCD90FF814FF0070495C0060495CA200E04949485CD8C01F187E4A5C
1200040715FE013F6091C75BA2040F14014960017E5D1903041F5D13FE494B130762043F
160E0001060F130C4992C713C0191F4CED801C00031A1849027E1638F2003004FE167000
071A60494A16E0F201C0030192380F0380000FF18700494AEC03FED80380D90070EC00F8
4F2D7DAB55>I<01F8EB03FCD803FEEB1FFFD8071F90387C0FC03B0E0F80E007E03A0C07
C3C003001CD9C7007F001801CE1301003801DC80003013D8EB0FF800705B00605BA200E0
491303D8C01F5D5C12001607013F5D91C7FCA2160F495D137E161F5F13FE49143F94C7FC
187000014B136049147E16FE4C13E0000317C049150104F81380170300071700495D170E
EE781C000FED7C3849EC1FF0D80380EC07C0342D7DAB3A>I<01F8EB0FC0D803FEEB7FF0
D8070FEBF038000E903883C07C3A0C07C701FC001C13CE0018EBDC03003813D8003013F8
D90FF013F800709038E000E0006015005C12E0EAC01F5C1200A2133F91C8FCA35B137EA3
13FE5BA312015BA312035BA312075BA3120F5BEA0380262D7DAB2C>114
D<EC0FF0EC7FFE903901F00F809039078001C049C712E0011E14605BED01F0491307A201
F8EB0FE05B7FED03806D90C7FC7F7F14F86DB47E15E06D13F86D7F01077F1300EC07FF14
0081ED3F80151F120E003FEC0F00487EA25D48C7121EA200FC5C12605D00705C6C495A6C
EB07C0260F803FC7FC3803FFFC38007FE0242D7BAB2E>I<133ED9FF8014E02603C3C0EB
03F0380703E0380601F0000E1507121CD818035D12380030150FA2D870075D00605B161F
EAE00F00C0495CEA001F4A133FA2013F92C7FC91C7FC5E5B017E147EA216FE13FE495CA2
0301EB01801703484802F81300A25F0303130616F000001407030F130E6D010D130C017C
011D131C033913186D9038F0F838903A1F03C07870903A07FF803FE0903A01FC000F8031
2D7DAB38>117 D<013E140ED9FF80EB3F802603C3C0137F380703E0380601F0120E121C
D81803143F0038151F0030150FA2D87007140700605BA2D8E00F150000C0497FEA001F4A
5B1606133F91C7FC160E49140C137EA2161C01FE14185B1638163016704848146016E05E
150100005D15036D49C7FC1506017C130E017E5B6D137890380F81E06DB45AD900FEC8FC
292D7DAB2F>I<013E1738D9FF80D901C013FC2603C3C0903907E001FE380703E0380601
F0000E150F001C16C0D8180316000038187E0030031F143E00705ED86007171E5C163FD8
E00F92C7121C00C049160CEA001F4A49141C047E1418133F91C7FC04FE1438491730017E
5CA20301157001FE1760495C19E019C0A24949481301198018031900606D010714067013
0E017C010F5C017E010C1418013ED91CFC13386DD9387E13F0903B0FC0F01F01C0903B03
FFC00FFF809028007F0001FEC7FC3F2D7DAB46>I<02FCEB07E0903A03FF801FFC903A0F
07C0781E903A1C03E0E01F903A3801F1C07FD9700013804901FB13FF4848EBFF00495B00
0316FE90C71438484A130012061401000E5C120CC7FC14035DA314075DA3140F5DA3021F
143817305D1770023F1460121E003F16E0267F807FEB01C0026F148000FF01EF1303D901
CFEB070000FE903887C00E267C03835B3A3C0F01E0783A1FFC00FFE0D803F0EB3F80302D
7EAB37>I<133ED9FF8014E02603C3C0EB03F0380703E0380601F0000E1507001C16E0EA
180312380030150F007016C0EA60075C161FD8E00F158000C05BEA001F4A133F1700133F
91C7FC5E49147E137EA216FE01FE5C5BA215015E485AA215035EA200001407150F6D5C01
7C131F153F6D13FF90391F03CFC0903807FF8F903801FC0F90C7121F5EA2153F93C7FCD8
07C05BD81FE0137E5DA24848485A4A5A01805B39380007C00018495A001C49C8FC6C137C
380781F83803FFE0C66CC9FC2C407DAB30>I<027CEB018049B413034901801300010F6D
5A49EBE00E6F5A90393F03F838903978007EF80170EB1FF00160EB01E001E05C49495A90
C748C7FC150E5D5D5D5D4A5A4A5A4AC8FC140E5C5C5C5CEB03C049C9FC130E49141C4914
185B49143848481430491470D8039014F048B4495A3A0FEFC007C0391E03F01FD81C01B5
5A486C91C7FC485C00606D5A00E0EB3FF048EB0FC0292D7CAB2D>I
E /Fo 38 123 df<EFFFC00407EBF83F93381F807E93397E000F7F04F8EB1F7E4B48EB3F
FE0303147F4B4813FF19FC4B5A187E183D4B48EB01F8A31803033F15F093C7FCA218074B
15E0A2157E180F19C0A215FE91B8FC1980A2DA00FCC7121F0201153F4B1500A360020315
7E5DA218FE6014075D170160A2140F4B130360A3021F14074B5CA3050F1338023FEDC078
92C71470A3051F13F04AED80E0147E188119C0170F02FEED83804AEC0787F0C700EF01FE
EF0078494892C7FCA4495AA3001C5BEA7F0700FF5BA25C130F00FE90CBFCEAF81E12F0EA
783CEA1FF0EA07C0405A83C539>13 D<007FB5FCB6FCA214FEA21805789723>45
D<EF03801707A24D7EA2171FA2173F177FA217FFA25EA2EE03BF1607173F160F160E161C
841638171F167016F016E0ED01C0A2ED0380A2ED0700A2150E151E151C5D845D170F5D14
015D14035D4AC7FC92B6FC5CA2021CC7120F143C14385CA24A81A249481407A2495A1307
91C8FC130E131EA25B137C13FC00014C7ED807FE151FB500E00107B512F8A219F03D477B
C648>65 D<DC0FF8130393B513070307ECC00F923A1FF803E01F923A7FC000F81E4BC7EA
7C3EDA03FCEC3C7EDA0FF0EC1EFE4A48EC0FFC4A4814074AC8FC02FE1503494816F81303
49481501495A494816F0495A137F5C01FF17E04890C9FCA2485A19C0485AA2485A95C7FC
121F5BA2123F5BA3127F5BA4485AA41838A218781870A218F0007F5F1701601703003F5F
17076D4BC7FC001F160E171E6C6C5D6D5D00075E6C6C4A5A6DEC07C06C6C4A5AD8007F02
3EC8FCD93FC013FC90391FF807F00107B512C0010191C9FC9038001FF0404872C546>67
D<91B91280A30201902680000713006E90C8FC4A163FA24B81A30203160E5DA314074B15
1E191CA2140F5D17075F021F020E90C7FC5DA2171E023F141C4B133CA2177C027F5CED80
0392B5FCA291B65AED00071601A2496E5A5CA2160101035D5CA2160301075D4A90CAFCA3
130F5CA3131F5CA3133F5CA2137FA313FFB612E0A341447AC340>70
D<DC0FF81306DCFFFE130E03079038FF801E923A1FF807E03E923A7F8001F03CDA01FEC7
EA787CDA03F8EC3CFCDA0FF0141D4A48EC1FF8DA3F80140F4AC8FCD901FE1507494816F0
5C01071603495A494816E0495A137F5C01FF17C04890C9FC5B12031980485AA2485A95C7
FC121F5BA2123F5BA3127F5BA4485A043FB512E0A39339001FF80060A360A2007F163F60
A3177F003F5F7F121F17FF6D93C7FC000F5D6C6C5C7F6C6C4A5A6C6CEC1F3E6C6C143ED9
3FC0EBF81E903A1FF007F01C0107B5EAC00C010149C9FC9038003FF03F4872C54B>I<02
7FB512E091B6FCA20200EBE000ED7F8015FFA293C7FCA35C5DA314035DA314075DA3140F
5DA3141F5DA3143F5DA3147F5DA314FF92C8FCA35B5CA313035CA313075CA3130F5CA313
1F5CA2133FA25CEBFFE0B612E0A25D2B447BC326>73 D<EE1FF84BB5FC923907F01FC092
391F8003F092397E0001F8DA01F86D7EDA03E0147EDA0FC0804A48EC1F804AC813C0027E
150F4A16E049481507494816F01307495A494816F8013F16035C137F49C9FC4917FC1201
12035B1207491607120FA25B121F19F849160F123FA34848EE1FF0A3183F19E0485A19C0
187FA2F0FF80A219005F604D5AA2007F4C5A4D5AA24D5A003F5F4D5A6D4BC7FC001F5E4C
5A6C6C5DEE03F06C6C4A5A0003ED1FC06C6C4A5A6C6C027EC8FC017EEB01F890393F8007
F090390FE03F80902603FFFEC9FC9038007FE03E4872C54B>79 D<91B712F018FEF0FF80
0201903980007FE06E90C7EA1FF04AED07F818034B15FCF001FE1403A24B15FFA21407A2
5DA2140FF003FE5DA2021F16FC18074B15F8180F023F16F0F01FE04B15C0F03F80027FED
7F0018FE4BEB03FCEF0FF002FFEC7FC092B6C7FC17F892CAFC5BA25CA21303A25CA21307
A25CA2130FA25CA2131FA25CA2133FA25CA2137FA25C497EB67EA340447AC342>I<DB03
FE130C92390FFF801C037FEBE03C9238FE03F8913A03F0007C7C4A48EB3EF84A48131F4A
48130F4AC7FC027EEC07F05C1703495A18E0495AA213074A15C0A3130F1880A28094C7FC
A280806D7EECFFE015FC6DEBFF806D14F016FC6D14FF023F80020F801403DA003F7F1507
03007F163F161F160FA21607A3120716031607A2485EA2120E160F001E5EA2001F4B5AA2
484BC7FC6D143E167E6D5C007F4A5A6D495AD87CF0495AD8787CEB1F8027F03F807FC8FC
90381FFFFCD8E00713F039C0007F80364879C537>83 D<48B912F85AA2913B0007FC001F
F0D807F84A130701E0010F140349160148485C90C71500A2001E021F15E05E121C123C00
38143F4C1301007818C0127000F0147F485DA3C800FF91C7FC93C9FCA35C5DA314035DA3
14075DA3140F5DA3141F5DA3143F5DA3147F5DA314FF92CAFCA35B5CA21303A21307497E
007FB612C0A25E3D446FC346>I<B500FE013FB50107B5FC5EA200030180010101C09038
007FF091C849EC3FC04993C8EA1F8000011B001B1E1B1C1B3C1B381B781B704C5EA24C4B
5A5E505A5E040E4BC7FC5E1A0E4C151E1A1C4C6D133C1A384C5D177FDB01C05DA26DD903
804A5A150704004A5A6C5C030E4BC8FC5D190E4B151E191C4B153C19384B5DA24A485D14
034BEC81C0140792C7EB8380140E0687C9FC4A158F188E4A15DE18DC4A15F8173F4A5DA2
4A5DA24A5D137F91C85B137E95CAFC137C173E1378173C0170153858466CC361>87
D<EC1F80EC7FE0903901F07070903907C039F890380F801D90381F001F013E6D5A137E5B
484813075E485A120749130F000F5DA2485A151F003F5D5BA2153F007F92C7FC90C7FCA2
5D157E12FEA29238FE0380EDFC071700A2007E13015E913803F80E1407003E010F131E16
1C6C131C02385B3A0F80F078783A07C3E07C703A01FF801FE03A007E000780292D76AB32
>97 D<EB0FE0EA07FFA338001FC0130F131FA25CA3133F91C8FCA35B137EA313FE5BA312
015BEC1F80EC7FE03903F9E0F89038F3C07C9038F7003E13FE48487F5BA2491480485AA2
5BA2121F5BA2153F123F90C7FCA2157F481500127EA25D5D5AA24A5AA24A5AA2007C5C4A
5A140F5D4A5A003C49C7FC003E137E001E5B6C485A380783E03803FF80C648C8FC214676
C42D>I<EC0FE0EC7FF8903801F81E903807E00F90390F80078090381F0003017E14C049
131F0001143F5B4848EB7F801207485AED3E00484890C7FCA2485AA2127F90C9FCA35A5A
A45AA5ED0180ED03C0ED0780A2007CEC0F00007E141E003E147C15F06CEB03E0390F800F
802607C07EC7FC3801FFF838007FC0222D75AB2D>I<EE07F0ED03FFA39238000FE01607
160FA217C0A2161FA21780A2163FA21700A25EA2167EA216FEA25EEC1F80EC7FE1903801
F071903907C039F890380F801D90381F001F013E130F017E5C5B48481307A248485C1207
49130F120F5E485A151F123F495CA2153F127F90C790C7FCA25DA200FE147EA29238FE03
80160703FC1300A2007E13015E913803F80E1407003E010F131E161C6C131C02385B3A0F
80F078783A07C3E07C703A01FF801FE03A007E0007802C4676C432>I<EC0FE0EC7FF890
3801F83E903807C00F90391F800780EB3F00017E14C0491303485A48481307000715805B
000F140F484814005D4848133E15FCEC07F0007FEBFFC0D9FFFEC7FC14C090C9FC5A5AA5
5AA4ED0180ED03C0007CEC0780A2007EEC0F00003E141E157C6C14F06CEB03E03907800F
802603C07EC7FC3801FFF838003FC0222D75AB2D>I<EE0F80EE3FE0EEF870923801F038
923803E0F8923807E1FC16C3ED0FC7A2EE87F892381F83F0EE81E0EE8000153F93C7FCA4
5D157EA415FE5DA349B512FEA390260001F8C7FCA314035DA414075DA4140F5DA4141F5D
A4143F92C8FCA55C147EA314FE5CA413015CA4495AA35C1307121C007F5B12FF495AA291
C9FC485AEAF81E485AEA7878EA1FF0EA07C02E5A83C51E>I<15FCEC03FF91390F838380
91393E01CFC091387C00EF4A13FF4948137F010315804948133F495A131F4A1400133F91
C75A5B167E13FE16FE1201495CA215011203495CA21503A2495CA21507A25EA2150F151F
5E0001143F157F6C6C13FF913801DF8090387C039F90383E0F3FEB0FFCD903F090C7FC90
C7FC5DA2157EA215FEA25DA2001C495A127F48495A14074A5A485C023FC8FC00F8137E38
7C01F8381FFFE0000390C9FC2A407BAB2D>I<14FE137FA3EB01FC13001301A25CA21303
A25CA21307A25CA2130FA25CA2131FA25C157F90393F83FFC091388F81F091381E00F802
387F4948137C5C4A137EA2495A91C7FCA25B484814FE5E5BA2000314015E5BA200071403
5E5B1507000F5DA249130F5E001F1678031F1370491480A2003F023F13F0EE00E090C7FC
160148023E13C01603007E1680EE070000FEEC1E0FED1F1E48EC0FF80038EC03E02D467A
C432>I<143C147E14FE1301A3EB00FC14701400AE137C48B4FC3803C780380703C0000F
13E0120E121C13071238A21278EA700F14C0131F00F0138012E0EA003F1400A25B137EA2
13FE5B12015BA212035B141E0007131C13E0A2000F133CEBC038A21478EB807014F014E0
EB81C0EA0783EBC7803803FE00EA00F8174378C11E>I<16F0ED03F8A21507A316F0ED01
C092C7FCAEEC01F0EC07FCEC1E1EEC380F0270138014E0130114C0EB03800107131F1400
A2130E153F131E011C140090C7FC5DA2157EA215FEA25DA21401A25DA21403A25DA21407
A25DA2140FA25DA2141FA25DA2143FA292C7FCA25C147EA214FE001C5B127F48485A495A
A248485A495AD8F81FC8FCEA707EEA3FF8EA0FC0255683C11E>I<14FE137FA3EB01FC13
001301A25CA21303A25CA21307A25CA2130FA25CA2131FA25C167E013F49B4FC92380783
C09138000E07ED3C1F491370ED603F017E13E0EC01C09026FE03801380913907000E00D9
FC0E90C7FC5C00015B5C495AEBF9C03803FB8001FFC9FCA214F03807F3FCEBF07F9038E0
1FC06E7E000F130781EBC003A2001F150FA20180140EA2003F151E161C010013E0A2485D
A2007E1578167000FE01015B15F1489038007F800038021FC7FC2A467AC42D>I<EB03F8
EA01FFA3380007F013031307A214E0A2130FA214C0A2131FA21480A2133FA21400A25BA2
137EA213FEA25BA21201A25BA21203A25BA21207A25BA2120FA25BA2121FA25BA2123FA2
90C7FCA2387F01C01303007E1380A2130700FE130012FCA25B130EEA7C1E131CEA3C3CEA
3E786C5AEA07C0154678C419>I<D801F0D90FE0EB07F0D803FCD97FF8EB3FFC28071E01
F03EEBF81F3E0E1F03C01F01E00F80271E0F8700D983807F001C018E90390F870007003C
019C148E003801B802DC8002F814FC26781FF05C0070495CA24A5C00F0494948130FD8E0
3F6091C75B1200043F141F4960017E92C7FCA24C143F01FE95C7FC49147E6104FE147E12
01494A14FE610301EE0780000305011400494A14F8A2030302035B0007F0F00E495C1A1E
0307EDE01C000F193C494A153862030F020113F0001FF0F1E0494A903800FF800007C7D8
0380023EC7FC492D78AB50>I<D801F0EB0FE0D803FCEB7FF83A071E01F03E3A0E0F03C0
1F001ED987001380001C018E130F003C139C003801B814C014F838781FF000705BA25C00
F049131FD8E03F158091C7FC1200163F491500137EA25E01FE147E5B16FE5E1201491301
5E170F00030203130E4914F0A20307131E0007EDE01C5B173CEEC038000F167849157017
E0ED03C1001FEDE3C049903801FF000007C8127C302D78AB37>I<EC0FE0EC7FFC903801
F83E903907E00F8090390F8007C0EB1F00017EEB03E04914F0A248481301484814F81207
485AA2485AA2485A1503127F90C7FCA215074815F05AA2150F16E05AED1FC0A21680153F
16005D157E5D007C495A007E495A003E5C4A5A6CEB1F80260F803EC7FC3807C0FC3801FF
F038003F80252D75AB32>I<D903E0137E903A07F801FF80903A0E3C0783E0903A1C1E0F
01F0903A3C1F1C00F801385B017849137C01705BA24A48137E01E05BA292C7FC00015B13
C0147EC7FC02FE14FEA25CA20101140117FC5CA20103140317F85CA20107EC07F0A24AEB
0FE0A2010F15C0EE1F80163F1700496C137E5E4B5A9138B803F090393F9C07E091389E0F
80DA07FEC7FCEC01F849C9FCA2137EA213FEA25BA21201A25BA21203A21207B512F0A25C
2F3F7FAB32>I<91381F800C91387FE01C903901F0703C903907C0387890390F801CF890
381F001D013E130F017E14F05B48481307A2484814E012075B000F140F16C0485AA2003F
141F491480A3007F143F90C71300A35D00FE147EA315FE5DA2007E1301A24A5A1407003E
130FA26C495A143B380F80F33807C3E73901FF87E038007E071300140F5DA3141F5DA314
3F92C7FCA25CA25C017F13FEA25D263F76AB2D>I<D801F0EB3F803A03FC01FFF03A071E
03C0F83A0E0F0F007C001E90389E01FC001C139CECB803003813F0A2D91FE013F80078EC
00E00070491300A200F05BEAE03F91C8FC1200A25B137EA313FE5BA312015BA312035BA3
12075BA3120F5BA3121F5B0007C9FC262D78AB29>I<EC0FE0EC7FF8903801F01E903803
C00F90390780078090380F0003011E14C0150749131FA2017CEB3F801378137CED0E0092
C7FC137E137F14F014FF6D13C06D13F06D7F6D7F1300EC0FFE14011400157F81120E003F
141E487EA2153E48C7123CA200FC5C12705D0078495A6C495A6CEB0F80260F803EC7FC38
03FFF838007FC0222D7AAB28>I<1470EB01F8A313035CA313075CA3130F5CA3131F5CA2
007FB512E0B6FC15C0D8003FC7FCA25B137EA313FE5BA312015BA312035BA312075BA312
0F5BA2EC0780001F140013805C140E003F131EEB001C143C14385C6C13F0495A6C485AEB
8780D807FEC7FCEA01F81B3F78BD20>I<137C48B414072603C780EB1F80380703C0000F
7F000E153F121C0107150012385E1278D8700F147E5C011F14FE00F05B00E05DEA003FEC
0001A2495C137E150313FE495CA215071201495CA2030F13380003167849ECC070A3031F
13F0EE80E0153F00011581037F13C06DEBEF8300000101148090397C03C787903A3E0F07
C70090391FFE01FE903903F000782D2D78AB34>I<017C143848B414FC3A03C78001FE38
0703C0000F13E0120E001C14000107147E1238163E1278D8700F141E5C131F00F049131C
12E0EA003F91C7123C16385B137E167801FE14705BA216F0000115E05B150116C0A24848
EB0380A2ED0700A2150E12015D6D5B000014786D5B90387C01E090383F0780D90FFFC7FC
EB03F8272D78AB2D>I<017CEE038048B4020EEB0FC02603C780013FEB1FE0380703C000
0E7F5E001C037E130F01071607123804FE130300785DEA700F4A1501011F130100F00180
4914C012E0EA003FDA000314034C14805B137E0307140701FE1700495CA2030F5C000117
0E495CA260A24848495A60A2601201033F5C7F4B6C485A000002F713036D9039E7E00780
90267E01C349C7FC903A1F0781F81E903A0FFF007FF8D901FCEB0FE03B2D78AB41>I<02
F8133FD907FEEBFFE0903A0F0F83C0F0903A1C07C780F890393803CF03017013EE01E0EB
FC07120101C013F8000316F00180EC01C000074AC7FC13001407485C120EC7FC140F5DA3
141F5DA3143F92C8FCA34AEB03C01780147EA202FEEB0700121E003F5D267F81FC130E6E
5BD8FF83143CD903BE5B26FE079E5B3A7C0F1F01E03A3C1E0F83C0271FF803FFC7FC3907
E000FC2D2D7CAB2D>I<137C48B414072603C780EB1F80380703C0000F7F000E153F001C
1600130712385E0078157EEA700F5C011F14FE00F0495B12E0EA003FEC00015E5B137E15
0301FE5C5BA2150700015D5BA2150F00035D5BA2151F5EA2153F12014BC7FC6D5B00005B
EB7C0390383E0F7EEB1FFEEB03F090C712FE5DA214015D121F397F8003F0A24A5A484848
5A5D48131F00F049C8FC0070137E007813F8383801F0381E07C06CB4C9FCEA01FC294078
AB2F>I<027C130749B4130F49EB800E010F141E49EBC03CEDE03890393F03F07890397C
00FDF00178EB3FE00170EB03C001F0148049130790C7EA0F00151E5D5D5D4A5A4A5A4A5A
4AC7FC141E5C5C5C495A495A495A49C8FC011E14F04914E05B491301485A4848EB03C0D8
07B0130701FEEB0F80390FCF801F3A1F07E07F00393E03FFFED83C015B486C5B00705C00
F0EB7FC048011FC7FC282D7BAB28>I E /Fp 45 123 df<ED0FFF4AB512C0020F14F002
7F80903A01FFF803FC499038C000FE010FEB00034948497E49485B5C495A4C138001FF6E
13005CA3705AEE01F893C8FCA74BB51280B9FCA5C69038E00003B3B0007FD9FFC1B6FCA5
38467EC53E>12 D<EC01E01403EC0FC0EC1F80EC3F00147E5C1301495A495A5C130F495A
133F5C137F49C7FCA2485AA2485AA212075BA2120F5BA2121FA25B123FA4485AA612FFA2
5BAE7FA2127FA66C7EA4121F7FA2120FA27F1207A27F1203A26C7EA26C7EA26D7E133F80
131F6D7E1307806D7E6D7E1300147E80EC1F80EC0FC0EC03E014011B6476CA2C>40
D<12F07E127E7E6C7E6C7E6C7E7F6C7E6C7E12007F137F80133F806D7EA26D7EA26D7EA2
801303A2801301A280A27F1580A4EC7FC0A615E0A2143FAE147FA215C0A6ECFF80A41500
5BA25CA213035CA213075CA2495AA2495AA2495A5C137F91C7FC13FE5B1201485A485A5B
485A485A48C8FC127E12F85A1B647ACA2C>I<B612F8A91D097F9A25>45
D<EA07C0EA1FF0EA3FF8EA7FFCEAFFFEA7EA7FFCEA3FF8EA1FF0EA07C00F0F788E1F>I<
EC03C01407141F147FEB03FF133FB6FCA413C3EA0003B3B3ADB712FCA5264177C038>49
D<ECFFE0010F13FE013F6D7E90B612E0000315F82607FC0313FE3A0FE0007FFFD81F806D
138048C7000F13C0488001C015E001F07F00FF6E13F07F17F881A46C5A6C5A6C5AC9FC17
F05DA217E05D17C04B13804B1300A2ED1FFC4B5A5E4B5A4B5A4A90C7FC4A5A4A5AEC0FF0
4A5AEC3F804AC7127814FE495A494814F8D907E014F0495A495A49C8FC017C1401491403
48B7FC4816E05A5A5A5A5AB8FC17C0A42D417BC038>I<ECFFF0010713FF011F14C0017F
14F049C66C7ED803F8EB3FFED807E06D7E81D80FF86D138013FE001F16C07FA66C5A6C48
15806C485BC814005D5E4B5A4B5A4B5A4A5B020F1380902607FFFEC7FC15F815FF16C090
C713F0ED3FFCED0FFEEEFF80816F13C017E0A26F13F0A217F8A3EA0FC0EA3FF0487EA248
7EA217F0A25D17E06C5A494913C05BD83F80491380D81FF0491300D80FFEEBFFFE6CB612
F800015D6C6C14C0011F49C7FC010113E02D427BC038>I<163FA25E5E5D5DA25D5D5D5D
A25D92B5FCEC01F7EC03E7140715C7EC0F87EC1F07143E147E147C14F8EB01F0EB03E013
0714C0EB0F80EB1F00133E5BA25B485A485A485A120F5B48C7FC123E5A12FCB91280A5C8
000F90C7FCAC027FB61280A531417DC038>I<0007150301E0143F01FFEB07FF91B6FC5E
5E5E5E5E16804BC7FC5D15E092C8FC01C0C9FCAAEC3FF001C1B5FC01C714C001DF14F090
39FFE03FFC9138000FFE01FC6D7E01F06D13804915C0497F6C4815E0C8FC6F13F0A317F8
A4EA0F80EA3FE0487E12FF7FA317F05B5D6C4815E05B007EC74813C0123E003F4A1380D8
1FC0491300D80FF0495AD807FEEBFFFC6CB612F0C65D013F1480010F01FCC7FC010113C0
2D427BC038>I<4AB47E021F13F0027F13FC49B6FC01079038807F8090390FFC001FD93F
F014C04948137F4948EBFFE048495A5A1400485A120FA248486D13C0EE7F80EE1E00003F
92C7FCA25B127FA2EC07FC91381FFF8000FF017F13E091B512F89039F9F01FFC9039FBC0
07FE9039FF8003FF17804A6C13C05B6F13E0A24915F0A317F85BA4127FA5123FA217F07F
121FA2000F4A13E0A26C6C15C06D4913806C018014006C6D485A6C9038E01FFC6DB55A01
1F5C010714C0010191C7FC9038003FF02D427BC038>I<121E121F13FC90B712FEA45A17
FC17F817F017E017C0A2481680007EC8EA3F00007C157E5E00785D15014B5A00F84A5A48
4A5A5E151FC848C7FC157E5DA24A5A14035D14074A5AA2141F5D143FA2147F5D14FFA25B
A35B92C8FCA35BA55BAA6D5A6D5A6D5A2F447AC238>I<DCFFF01470031F01FF14F04AB6
EAE0010207EDF803023FEDFE0791B539E001FF0F4949C7EA3F9F010701F0EC0FFF4901C0
804990C87E4948814948814948167F4849163F4849161F5A4A160F485B19074890CAFC19
035A5BA2007F1801A34994C7FC12FFAE127F7F1AF0A2123FA27F6C18011AE06C7F19036C
6D17C06E16077E6C6DEE0F806C6DEE1F006D6C5E6D6C167E6D6C6C5D6D6D4A5A6D01F0EC
07F0010101FEEC1FE06D903AFFF001FF80023F90B6C7FC020715FC020115F0DA001F1480
030001F8C8FC44467AC451>67 D<B9FC18F018FE727E19E026003FFEC7001F13F805017F
9438003FFF060F7F727F727F727F84737E737EA2737EA2737EA21B80A2851BC0A51BE0AD
1BC0A51B8061A21B006162193F624F5A19FF624E5B06075B4E5B063F90C7FC4DB45A050F
13F8BA5A19C04EC8FC18F095C9FC4B447CC356>I<BA12F8A485D8001F90C71201EF003F
180F180318011800A2197E193EA3191EA21778A285A405F890C7FCA316011603161F92B5
FCA5ED001F160316011600A2F101E01778A2F103C0A494C7FC1907A21A80A2190FA2191F
A2193FF17F0061601807181F4DB5FCBBFC61A443447DC34A>I<DCFFF01470031F01FF14
F04AB6EAE0010207EDF803023FEDFE0791B539E001FF0F4949C7EA3F9F010701F0EC0FFF
4901C0804990C87E4948814948814948167F4849163F4849161F5A4A160F485B19074890
CAFC19035A5BA2007F1801A34994C8FC12FFAD057FB612F0127F7FA3003FDC0001EBF000
A27F7EA26C7FA26C7F807E6C7F6C7F6D7E6D6C5D6D6C7E6D6D5C6D01F05C010101FE143F
6D903AFFF001FF9F023F90B6120F0207EDFC030201EDF000DA001F02C01330030001FCC9
FC4C467AC458>71 D<B7D88003B612FEA526003FFEC9EBF800B3A791B9FCA54AC9FCB3AA
B7D88003B612FEA54F447CC358>I<B712E0A5D8001F90C7FCB3B3B3A4B712E0A523447D
C32A>I<B500FE067FB512806E95B6FCA26F5EA2D8003F50C7FC013D6DEE03DFA2013C6D
EE079FA26E6CEE0F1FA26E6C161EA26E6C163CA36E6C1678A26E6C16F0A26E6DEC01E0A2
6E6DEC03C0A36E6DEC0780A26F6CEC0F00A26F6C141EA26F6C5CA36F6C5CA26F6C5CA26F
6D485AA26F6D485AA26F6D485AA3706C48C7FCA293383FF81EA2706C5AA2706C5AA3706C
5AA2705BA2705BA2705BA2B6057FB6128071C7FCA2173E171C61447CC36A>77
D<B9FC18F018FE727E19E0D8001F90C7000F7F05017F716C7E727E727E721380A21AC084
A21AE0A91AC0A24E1380A21A00604E5A4E5A4D485A050F5B92B712C096C7FC18FC18C092
CBFCB3A7B712E0A543447DC34D>80 D<DAFFE0131C010701FE133C013F9038FF807C90B6
EAE0FC4815F9489038801FFF3907FC00014848EB007F4848143F4848140F491407007F15
035B1601160012FF177CA27FA26D153C7F7F6D92C7FC6C7EEBFFE014FE6CEBFFF015FF6C
15E016FC6C816C6F7E6C826C826C6C81011F810107811300020F80140003077FED007F82
040F1380828212F082A282A27EA218007EA26C5D6C5E6D14036D5D6D140701F84A5A01FF
EC3FF002F8EBFFE0486CB65AD8FC1F92C7FCD8F80714FC48C614F0480107138031467AC4
3E>83 D<003FBA12E0A59026FE000FEB8003D87FE09338003FF049171F90C71607A2007E
1803007C1801A300781800A400F819F8481978A5C81700B3B3A20107B8FCA545437CC24E
>I<903801FFE0011F13FE017F6D7E48B612E03A03FE007FF84848EB1FFC6D6D7E486C6D
7EA26F7FA36F7F6C5A6C5AEA00F090C7FCA40203B5FC91B6FC1307013F13F19038FFFC01
000313E0000F1380381FFE00485A5B127F5B12FF5BA35DA26D5B6C6C5B4B13F0D83FFE01
3EEBFFC03A1FFF80FC7F0007EBFFF86CECE01FC66CEB8007D90FFCC9FC322F7DAD36>97
D<EB7FC0B5FCA512037EB1ED0FF892B57E02C314E002CF14F89139DFC03FFC9139FF000F
FE02FCEB03FF4A6D13804A15C04A6D13E05CEF7FF0A218F8173FA318FCAC18F8A2177F18
F0A3EFFFE06E15C06E5B6E491380027C491300496C495A903AFC1FC07FFC496CB512F0D9
F00314C049C691C7FCC8EA1FF036467DC43E>I<EC3FFC49B512C0010F14F0013F14FC90
397FF003FE9039FFC001FF0003495A48494813805B120F485AA2485A6F1300007F6E5AED
00784991C7FCA212FFAC6C7EA3123F6DEC03C0A26C6C1407000F16806D140F6C6DEB1F00
6C6D133E6C01F05B3A007FFC03F86DB55A010F14C0010391C7FC9038003FF82A2F7CAD32
>I<EE03FEED07FFA5ED001F160FB1EC3FE0903803FFFC010FEBFF8F013F14CF9039FFF8
07FF48EBC00148903880007F4890C7123F4848141F49140F121F485AA3127F5BA212FFAC
127FA37F123FA26C6C141FA26C6C143F0007157F6C6C91B5FC6CD9C00314FC6C9038F01F
EF6DB5128F011FEBFE0F010713F89026007FC0EBF80036467CC43E>I<EC3FF80103B57E
010F14E0013F8090397FF83FF89039FFC007FC48496C7E48496C7E48486D1380485A001F
ED7FC05B003FED3FE0A2127F5B17F0161F12FFA290B7FCA401F0C9FCA5127FA27FA2123F
17F06C7E16016C6C15E06C6C14036C6DEB07C06C6DEB0F806C01F0EB3F0090397FFE01FE
011FB55A010714F0010114C09026001FFEC7FC2C2F7DAD33>I<EDFF80020F13E0027F13
F049B512F849EB8FFC90390FFE0FFE90381FFC1F14F8133FEB7FF0A2ED0FFCEBFFE0ED03
F0ED00C01600ABB612F8A5C601E0C7FCB3B0007FEBFFE0A527467DC522>I<DAFFE0137E
010F9039FE03FF80013FEBFF8F90B812C048D9C07F133F489038001FF84848EB0FFC4848
903907FE1F80001F9238FF0F00496D90C7FCA2003F82A8001F93C7FCA26D5B000F5D6C6C
495A6C6C495A6C9038C07FF04890B55A1680D8078F49C8FC018013E0000F90CAFCA47F7F
7F90B612C016FC6CEDFF8017E06C826C16FC7E000382000F82D81FF0C77ED83FC0140748
48020113808248C9FC177FA46D15FF007F17006D5C6C6C4A5A6C6C4A5AD80FFEEC3FF83B
07FFC001FFF0000190B612C06C6C92C7FC010F14F8D9007F90C8FC32427DAC38>I<EB7F
C0B5FCA512037EB1ED07FE92383FFF8092B512E002C114F89139C7F03FFC9138CF801F91
39DF000FFE14DE14FC4A6D7E5CA25CA35CB3A7B60083B512FEA537457CC43E>I<137C48
B4FC4813804813C0A24813E0A56C13C0A26C13806C1300EA007C90C7FCAAEB7FC0EA7FFF
A512037EB3AFB6FCA518467CC520>I<EB7FC0B5FCA512037EB3B3B3A3B61280A519457C
C420>108 D<90277F8007FEEC0FFCB590263FFFC090387FFF8092B5D8F001B512E00281
6E4880913D87F01FFC0FE03FF8913D8FC00FFE1F801FFC0003D99F009026FF3E007F6C01
9E6D013C130F02BC5D02F86D496D7EA24A5D4A5DA34A5DB3A7B60081B60003B512FEA557
2D7CAC5E>I<90397F8007FEB590383FFF8092B512E0028114F8913987F03FFC91388F80
1F000390399F000FFE6C139E14BC02F86D7E5CA25CA35CB3A7B60083B512FEA5372D7CAC
3E>I<EC1FFC49B512C0010714F0011F14FC90397FF80FFF9026FFC0017F48496C7F4848
C7EA3FE000078248486E7E49140F001F82A2003F82491407007F82A400FF1780AA007F17
00A46C6C4A5AA2001F5E6D141F000F5E6C6C4A5AA26C6C6CEBFFE06C6D485B27007FF80F
90C7FC6DB55A010F14F8010114C09026001FFCC8FC312F7DAD38>I<90397FC00FF8B590
B57E02C314E002CF14F89139DFC03FFC9139FF001FFE000301FCEB07FF6C496D13804A15
C04A6D13E05C7013F0A2EF7FF8A4EF3FFCACEF7FF8A318F017FFA24C13E06E15C06E5B6E
4913806E4913006E495A9139DFC07FFC02CFB512F002C314C002C091C7FCED1FF092C9FC
ADB67EA536407DAC3E>I<90387F807FB53881FFE0028313F0028F13F8ED8FFC91389F1F
FE000313BE6C13BC14F8A214F0ED0FFC9138E007F8ED01E092C7FCA35CB3A5B612E0A527
2D7DAC2E>114 D<90391FFC038090B51287000314FF120F381FF003383FC00049133F48
C7121F127E00FE140FA215077EA27F01E090C7FC13FE387FFFF014FF6C14C015F06C14FC
6C800003806C15806C7E010F14C0EB003F020313E0140000F0143FA26C141F150FA27EA2
6C15C06C141FA26DEB3F8001E0EB7F009038F803FE90B55A00FC5CD8F03F13E026E007FE
C7FC232F7CAD2C>I<EB01E0A51303A41307A2130FA2131FA2133F137F13FF1203000F90
B51280B7FCA4C601E0C7FCB3A3ED01E0A9150302F013C0137F150790393FF80F8090391F
FC1F006DB5FC6D13FC01015B9038003FE023407EBE2C>I<D97FC049B4FCB50103B5FCA5
0003EC000F6C81B3A85EA25EA25E7E6E491380017FD901F713FE9138F807E76DB512C701
0F1407010313FE9026007FF0EBFC00372E7CAC3E>I<B6903803FFFCA5000101E0903800
3E006C163C80017F5D8017F8013F5D6E1301011F5D6E1303010F5D6E13076D5DED800F6D
92C7FC15C05E6DEBE01E163E6D143CEDF07C027F1378EDF8F8023F5B15FD021F5B15FF6E
5BA36E5BA26E90C8FCA26E5AA26E5AA21578362C7EAB3B>I<B5D8FE1FB539801FFFF0A5
00019027C0003FE0C7EA7C007114786E17F86C6F6C5C6E1601017F6E6C5CA26E011F1403
013F6F5C6E013F1407011F6F5CA26E0179140F010F048090C7FC6E01F95C6D02F0EBC01E
15806D902681E07F5B18E003C3157C6D9139C03FF07815E76DDA801F5B18F803FF14F96E
9039000FFDE018FF6E486D5BA36E486D5BA26E486D90C8FCA24B7F02075DA26E48147C4B
143C4C2C7EAB51>I<B500FE90383FFFF0A5C601F0903803E0006D6C495A013F4A5A6D6C
49C7FC6E5B6D6C137E6DEB807C6D6D5A6DEBC1F0EDE3E06DEBF7C06EB45A806E90C8FC5D
6E7E6E7F6E7FA24A7F4A7F8291381F3FFCEC3E1F027C7F4A6C7E49486C7F01036D7F4948
7E02C08049486C7F49C76C7E013E6E7E017E141FB500E090B512FCA5362C7EAB3B>I<B6
903803FFFCA5000101E09038003E006C163C80017F5D8017F8013F5D6E1301011F5D6E13
03010F5D6E13076D5DED800F6D92C7FC15C05E6DEBE01E163E6D143CEDF07C027F1378ED
F8F8023F5B15FD021F5B15FF6E5BA36E5BA26E90C8FCA26E5AA26E5AA21578A215F85D14
015D001F1303D83F805B387FC007D8FFE05B140F92C9FC5C143E495A387FC1F8EB07F06C
B45A6C5B000790CAFCEA01FC36407EAB3B>I<001FB71280A49026FC001F130001E0495A
5B49495A90C7485A48495B123E4A5B4A5B003C495BA24A90C7FC4A5A4A5AC7FC4A5A495B
495BA2495B499038800780491300A2495A4948130F49481400A2485B48495B485BA24849
5B4890C75A48485C15034848EB1FFEB7FCA4292C7DAB32>I E /Fq
27 120 df<94387FFF80041FB512F04BB612FC030F81037F6F7E4AB5D8E0077F4A49C76C
7E020F01F0EC1FF04A01C0147F4A90C8487E4A485C4A484A7F49495C495BA2495B4E7F49
705B5DA3725B725B725B735A96C9FCAB0503B512FEBBFCA6D8000F01E0C7120184B3B3AF
003FB6D8F803B71280A651657DE45A>12 D<EA01FCEA07FF4813804813C04813E04813F0
A2B512F8A76C13F0A26C13E06C13C06C13806C1300EA01FC151574942D>46
D<16F04B7E1507151F153FEC01FF1407147F010FB5FCB7FCA41487EBF007C7FCB3B3B3B3
007FB91280A6395E74DD51>49 D<913801FFF8021FEBFFC091B612F8010315FF010F16C0
013F8290267FFC0114F89027FFE0003F7F4890C7000F7F48486E7FD807F86E148048486E
14C048486E14E048486F13F001FC17F8486C816D17FC6E80B56C16FE8380A219FFA283A3
6C5BA26C5B6C90C8FCD807FC5DEA01F0CA14FEA34D13FCA219F85F19F04D13E0A294B512
C019804C14004C5B604C5B4C5B604C13804C90C7FC4C5A4C5A4B13F05F4B13804B90C8FC
4B5AED1FF84B5A4B5A4B48143F4A5B4A48C8FC4A5A4A48157E4A5A4A5AEC7F8092C9FC02
FE16FE495A495A4948ED01FCD90FC0150749B8FC5B5B90B9FC5A4818F85A5A5A5A5ABAFC
A219F0A4405E78DD51>I<92B5FC020F14F8023F14FF49B712C04916F0010FD9C01F13FC
90271FFC00077FD93FE001017F49486D8049C86C7F484883486C6F7F14C0486D826E806E
82487FA4805CA36C5E4A5E6C5B6C5B6C495E011FC85A90C95CA294B55A614C91C7FC604C
5B4C5B4C5B4C5B047F138092260FFFFEC8FC020FB512F817E094C9FC17F817FF91C7003F
13E0040713F8040113FE707F717F7113E085717FA2717F85A285831A80A31AC0EA03FCEA
0FFF487F487F487FA2B57EA31A80A34D14005C7E4A5E5F6C495E49C8485BD81FF85F000F
5ED807FE92B55A6C6C6C4914806C01F0010791C7FC6C9026FF803F5B6D90B65A011F16F0
010716C001014BC8FCD9001F14F0020149C9FC426079DD51>I<BB12E0F2FF801BF01BFE
757E1CF0D800010280C7000780DF007F13FE080F6D7E0801807480093F7F090F13FC757F
757F877580767F8A88767F8A888AA2767FA28A881F80A37614C0A41FE0A5881FF0B05214
E0A51FC0A4521480A31F006466A2525BA2525BA2525B666499B55A515C5191C7FC515B51
5B515B097F5B50B512C008075C083F91C8FC0707B512FCBD12F01CC051C9FC1BF81B8008
E0CAFC6C627AE17C>68 D<4DB5ED03C0057F02F014070407B600FE140F047FDBFFC0131F
4BB800F0133F030F05FC137F033F9127F8007FFE13FF92B6C73807FF814A02F0020113C3
020702C09138007FE74A91C9001FB5FC023F01FC16074A01F08291B54882490280824991
CB7E49498449498449498449865D49498490B5FC484A84A2484A84A24891CD127FA25A4A
1A3F5AA348491A1FA44899C8FCA25CA3B5FCB07E071FB812F880A37EA296C70001ECC000
A26C7FA37E807EA26C80A26C80A26C807F6D7F816D7F7F6D7F6D6D5F6D14C06D6E5E6E7F
6E01FC5E020F01FF5E6E02C0ED7FEF020102F8EDFFC76E02FF02071383033F02FC013F13
01030F91B638FC007F03014D131F6F6C04E01307040704801301DC007F02F8CAFC050191
CBFC6D6677E37F>71 D<BB7E1AFCF2FFC01BF81BFE757ED800010280C7001F80070114F0
736C7F081F7F747F747F7414807414C0A27414E0A21DF0A27513F8A41DFCA91DF8A498B5
12F0A21DE0A25014C01D8062501400505B505B087F5B4FB512E0071F5C93B9C7FC1BFC1B
F01B8008F0C8FC04C0CCFCB3B3A2B97EA65E627AE16E>80 D<913803FFFE027FEBFFF001
03B612FE010F6F7E4916E090273FFE001F7FD97FE001077FD9FFF801017F486D6D7F717E
486D6E7F85717FA2717FA36C496E7FA26C5B6D5AEB1FC090C9FCA74BB6FC157F0207B7FC
147F49B61207010F14C0013FEBFE004913F048B512C04891C7FC485B4813F85A5C485B5A
5CA2B55AA45FA25F806C5E806C047D7F6EEB01F96C6DD903F1EBFF806C01FED90FE114FF
6C9027FFC07FC01580000191B5487E6C6C4B7E011F02FC130F010302F001011400D9001F
90CBFC49437CC14E>97 D<903807FF80B6FCA6C6FC7F7FB3A8EFFFF8040FEBFF80047F14
F00381B612FC038715FF038F010014C0DBBFF0011F7FDBFFC001077F93C76C7F4B02007F
03F8824B6F7E4B6F13804B17C0851BE0A27313F0A21BF8A37313FCA41BFEAE1BFCA44F13
F8A31BF0A24F13E0A24F13C06F17804F1300816F4B5A6F4A5B4AB402075B4A6C6C495B91
26F83FE0013F13C09127F00FFC03B55A4A6CB648C7FCDAC00115F84A6C15E091C7001F91
C8FC90C8000313E04F657BE35A>I<92380FFFF04AB67E020F15F0023F15FC91B77E0103
9039FE001FFF4901F8010113804901E0010713C04901804913E0017F90C7FC49484A13F0
A2485B485B5A5C5A7113E0485B7113C048701380943800FE0095C7FC485BA4B5FCAE7EA2
80A27EA2806C18FCA26C6D150119F87E6C6D15036EED07F06C18E06C6D150F6D6DEC1FC0
6D01E0EC7F806D6DECFF00010701FCEB03FE6D9039FFC03FFC010091B512F0023F5D020F
1580020102FCC7FCDA000F13C03E437BC148>I<92380FFFC04AB512FC020FECFF80023F
15E091B712F80103D9FE037F499039F0007FFF011F01C0011F7F49496D7F4990C76C7F49
486E7F48498048844A804884485B727E5A5C48717EA35A5C721380A2B5FCA391B9FCA41A
0002C0CBFCA67EA380A27EA27E6E160FF11F806C183F6C7FF17F006C7F6C6D16FE6C1701
6D6C4B5A6D6D4A5A6D01E04A5A6D6DEC3FE0010301FC49B45A6D9026FFC01F90C7FC6D6C
90B55A021F15F8020715E0020092C8FC030713F041437CC14A>101
D<F107F8DB7FFEEC3FFE020FB5D8F001B5FC027FDAFE03148049B7128F49DCDFFD13C001
0FD9F00FEBFFC149D9800114014990C7EBFC0349486E6C7E4948EC3FFF48496E01811380
0780130048F0C03E97C7FC48496E7FA34884A96C60A36C6D4A5BA26C60A26C6D4A90C8FC
6D6C4A5A6D6C4A5A6D6D485BDBF00F5B4990B612C060D97C7F4AC9FCD9FC0F14F0912600
7FFECAFC92CCFC1201A47FA27F8014F091B77E18FE6CEFFFC019F06D17FC19FF6D846D84
6D846D84013F8490BAFC0003854801E0C712014890C9000F7F484816014848EE007F4848
717E8512FF5B85A56D5F007F616D173F003F616D177F6C6C4D5A6C01C003035B6C6D4B5B
6C01F8031F5BC601FF92B5C7FC6D01F8011F5B011F90B712F8010717E0010094C8FC020F
15F0DA003F01FCC9FC4A607CC151>103 D<903807FF80B6FCA6C6FC7F7FB3A8EF1FFF94
B512F0040714FC041F14FF4C8193267FE07F7F922781FE001F7FDB83F86D7FDB87F07FDB
8FC0814C7F039FC78015BE03BC8003FC825DA25DA25DA45DB3B2B7D8F007B71280A65164
7BE35A>I<EB0FE0EB3FF8497E48B5FCA24880A24880A76C5CA26C91C7FCA238007FFC6D
5AEB0FE090C9FCAF903807FF80007FB5FCA6C6FC7F7FB3B3AEB712C0A622657BE42C>I<
903807FF80B6FCA6C6FC7F7FB3A90503B61280A6DD003FEB8000DE0FFCC7FCF01FF04E5A
F0FFC04D5B4D90C8FCEF07FC4D5AEF3FF04D5A4D5A4C90C9FC4C5AEE0FFC4C5A4C5AEE7F
C04C7E03837F03877F158F039F7F03BF7F92B5FC838403FC804B7E03F0804B6C7F4B6C7F
1580707F707F707FA270807080717FA2717F717F717FA2717F717F83867180727F95B57E
B7D8E00FECFFF0A64C647BE355>107 D<903807FF80B6FCA6C6FC7F7FB3B3B3B3ADB712
E0A623647BE32C>I<902607FF80D91FFFEEFFF8B691B500F00207EBFF80040702FC023F
14E0041F02FF91B612F84C6F488193267FE07F6D4801037F922781FE001F9027E00FF000
7FC6DA83F86D9026F01FC06D7F6DD987F06D4A487F6DD98FC0DBF87EC7804C6D027C8003
9FC76E488203BEEEFDF003BC6E4A8003FC04FF834B5FA24B5FA24B94C8FCA44B5EB3B2B7
D8F007B7D8803FB612FCA67E417BC087>I<902607FF80EB1FFFB691B512F0040714FC04
1F14FF4C8193267FE07F7F922781FE001F7FC6DA83F86D7F6DD987F07F6DD98FC0814C7F
039FC78015BE03BC8003FC825DA25DA25DA45DB3B2B7D8F007B71280A651417BC05A>I<
923807FFE092B6FC020715E0021F15F8027F15FE494848C66C6C7E010701F0010F13E049
01C001037F49496D7F4990C87F49486F7E49486F7E48496F13804819C04A814819E04849
6F13F0A24819F8A348496F13FCA34819FEA4B518FFAD6C19FEA46C6D4B13FCA36C19F8A2
6C6D4B13F0A26C19E06C6D4B13C0A26C6D4B13806C6D4B13006D6C4B5A6D6D495B6D6D49
5B010701F0010F13E06D01FE017F5B010090B7C7FC023F15FC020715E0020092C8FC0307
13E048437CC151>I<902607FF80EBFFF8B6010FEBFF80047F14F00381B612FC038715FF
038F010114C09227BFF0003F7FC6DAFFC0010F7F6D91C76C7F6D496E7F03F86E7F4B6E7F
4B17804B6F13C0A27313E0A27313F0A21BF885A21BFCA3851BFEAE4F13FCA41BF861A21B
F0611BE0611BC06F92B512801B006F5C6F4A5B6F4A5B03FF4A5B70495B04E0017F13C092
26CFFC03B55A03C7B648C7FC03C115F803C015E0041F91C8FC040313E093CBFCB3A3B712
F0A64F5D7BC05A>I<D90FFFEB0FFCB690383FFF8093B512E04B14F04B14F8923907FC7F
FC92390FE0FFFEC6EC1F806DD93F0113FF6D133E157E157C15F8A215F07013FEA24BEB7F
FCEF3FF8EF0FE04B90C7FCA55DB3B0B712F8A638417BC042>114
D<913A3FFF8007800107B5EAF81F011FECFE7F017F91B5FC48B8FC48EBE0014890C7121F
D80FFC1407D81FF0801600485A007F167F49153FA212FF171FA27F7F7F6D92C7FC13FF14
E014FF6C14F8EDFFC06C15FC16FF6C16C06C16F06C826C826C826C82013F1680010F16C0
1303D9007F15E0020315F0EC001F1500041F13F81607007C150100FC81177F6C163FA217
1F7EA26D16F0A27F173F6D16E06D157F6D16C001FEEDFF806D0203130002C0EB0FFE02FC
EB7FFC01DFB65A010F5DD8FE0315C026F8007F49C7FC48010F13E035437BC140>I<EC07
E0A6140FA5141FA3143FA2147FA214FF5BA25B5B5B5B137F48B5FC000F91B512FEB8FCA5
D8001F01E0C8FCB3AFEF0FC0AC171F6D6D1480A2173F6D16006F5B6D6D137E6D6D5B6DEB
FF836EEBFFF86E5C020F14C002035C9126003FFCC7FC325C7DDA3F>I<902607FFC0ED3F
FEB60207B5FCA6C6EE00076D826D82B3B3A260A360A2607F60183E6D6D147E4E7F6D6D49
48806D6DD907F0ECFF806D01FFEB3FE06D91B55A6E1500021F5C020314F8DA003F018002
F0C7FC51427BC05A>I<B700C00103B512FCA6C66C01C0C8381FFE006D6DED07F0A26D6D
5E190F6D6D5E191F6D606F153F6D95C7FC6F5DA26D6D157E19FE6D6E5C18016E5E701303
6E5E701307A26E6D5C180F6E6D5C181F6E6D5C183F6E93C8FC705BA26E6D13FEA26E6E5A
17816FEBC1F817C36F5C17E76F5C17FFA26F5CA26F5CA26F91C9FCA26F5BA36F5BA2705A
A2705AA2705AA2705A4E417DBF55>I<B70081B600FC0103B512FCA6C66C0180C701FCC8
381FFE006F6FED03F86D047F5F856F6E16076D646F70140F6D705F866F6E161F6D646F4A
6D143F6D99C7FC4E7F6F616D1B7E6F4A6D14FE6D6395B57E7001FC15016E62DCC0016E13
036EDBF87F5D05038004E0496C14076E62DCF007ED800F6E4B6C5D050F15C004F8496C14
1F6E62DCFC1FEDE03F6E4B6C92C8FC053F15F004FE496C5C6E197E7048EDF8FE6E027E6D
5C05FE15FC4D6D13FD6F601BFF6F496E5BA24D806F60A26F496E5BA24D806F60A26F496E
90C9FCA294C87E6F5FA26F486F5A047C6F5A6E417DBF75>I E /Fr
85 124 df<1618163CA2167EA216FFA24B7FA24B6C7EA29238063FE0A24B6C7EA24B6C7E
A292383807FC153092387003FE15609238E001FF15C002016D7F5D02036E7E92C7FC4A6E
7E1406020E6E7E140C021C6E7E141802386E7E143002706E7E146002E06E7E5C01016F7F
5C0103707E91C9FC183F010683181F4983180F49831807498318034983A249707EA24848
701380A248CBEA7FC0A20006F03FE0A248F01FF0A2001FBA12F8A24819FCA24819FEA2BC
FC48477CC651>1 D<ED1FFC4AB512C0913907F007F091391F8000FC027EC7123F4948EC
1FC0D903F0EC07E049486E7E49486E7E49486E7E49C9127E49167F01FE707E4848707E00
038449160F000784491607000F84A24848707EA2003F84491601A2007F84A34982D98180
15C000FF1980A291B7FCA70280C8FCA30180CAFC007F19006D5EA3003F60A26D1603001F
60A2000F606D16070007606D160F0003606D161F0001606C6C4C5A017F4CC7FCA26D6C15
FE6D6C4A5AD907E0EC03F06D6C4A5AD901FCEC1FC0D9007E4AC8FCDA1F8013FC913907F0
07F00201B512C09126001FFCC9FC41487BC54C>I<ED7FF0020FB57E91393FC01FE09139
FE0003F8D903F8EB00FED90FE0EC3F8049486E7ED97F80EC0FF049C86C7E48486F7E4848
6F7E00078349814848EE7F80A2001F18C049163F003F18E0A34848EE1FF0AA6C6CEE3FE0
A4001F18C06D167F000F1880A26C6CEEFF00A200035F6D150100015F00005F6D1503017E
5E017F15076D5E6D5E6E140F010F5E010793C7FC6E5C0103151E00C018186D6C5CA2D860
00033813306E147802701470A20070013002601370003018600038013802E013E0263FFF
F891B5FCA36C18C0A33D467CC546>10 D<9239FFC001FC020F9038F80FFF913B3F803E3F
03C0913BFC00077E07E0D903F890390FFC0FF0494890383FF81F4948EB7FF0495A494814
E049C7FCF00FE04991393FC0038049021F90C7FCAFB912F0A3C648C7D81FC0C7FCB3B248
6CEC3FF0007FD9FC0FB512E0A33C467EC539>I<4AB4FC020F13E091387F80F8903901FC
001C49487FD907E0130F4948137F011FECFF80495A49C7FCA25B49EC7F00163E93C7FCAC
EE3F80B8FCA3C648C7FC167F163FB3B0486CEC7FC0007FD9FC1FB5FCA330467EC536>I<
913801FFC0020FEBFB8091387F803F903801FC00494813FFEB07E0EB1FC0A2495A49C7FC
167F49143F5BAFB8FCA3C648C7123FB3B2486CEC7FC0007FD9FC1FB5FCA330467EC536>
I<DBFF80EB3FE0020F9039F001FFFC913B3F807C0FF01F913CFC000E3F800380D903F86D
48486C7E4948D90FFC804948D93FF8130F4948017F4A7E49485C49C75BA25B494B6D5A04
1F6E5A96C8FCACF107F0BBFCA3C648C7391FC0001F190F1907B3B0486C4A6C497E007FD9
FC0FB50083B512E0A34B467EC551>I<131F1480133F137FA2EBFF00485A485A5B485A48
5A138048C7FC123E123C5A12E0124011126CC431>19 D<001EEB03C0397F800FF000FF13
1F01C013F8A201E013FCA3007F130F391E6003CC0000EB000CA401E0131C491318A30001
14384913300003147090C712604814E0000614C0000E130148EB038048EB070048130E00
60130C1E1D7DC431>34 D<121EEA7F8012FF13C0A213E0A3127FEA1E601200A413E013C0
A312011380120313005A1206120E5A5A5A12600B1D78C41B>39 D<140C141C1438147014
E0EB01C01303EB0780EB0F00A2131E5BA25B13F85B12015B1203A2485AA3485AA348C7FC
A35AA2123EA2127EA4127CA312FCB3A2127CA3127EA4123EA2123FA27EA36C7EA36C7EA3
6C7EA212017F12007F13787FA27F7FA2EB0780EB03C01301EB00E014701438141C140C16
6476CA26>I<12C07E12707E7E7E120F6C7E6C7EA26C7E6C7EA21378137C133C133E131E
131FA2EB0F80A3EB07C0A3EB03E0A314F0A21301A214F8A41300A314FCB3A214F8A31301
A414F0A21303A214E0A3EB07C0A3EB0F80A3EB1F00A2131E133E133C137C13785BA2485A
485AA2485A48C7FC120E5A5A5A5A5A16647BCA26>I<16C04B7EB3AB007FBAFCBB1280A2
6C1900C8D801E0C9FCB3AB6F5A41407BB84C>43 D<121EEA7F8012FF13C0A213E0A3127F
EA1E601200A413E013C0A312011380120313005A1206120E5A5A5A12600B1D78891B>I<
B612C0A61A067F9721>I<121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A0A78891B>I<1618
163C167CA2167816F8A216F01501A216E01503A216C01507A21680150FA2ED1F00A2151E
153EA2153C157CA2157815F8A25D1401A24A5AA25D1407A25D140FA292C7FC5CA2141E14
3EA2143C147CA25CA25C1301A25C1303A25C1307A25C130FA291C8FC5BA2133EA2133C13
7CA2137813F8A25B1201A25B1203A2485AA25B120FA290C9FC5AA2121E123EA2123C127C
A2127812F8A25A126026647BCA31>I<14FF010713E090381F81F890383E007C01FC133F
4848EB1F8049130F4848EB07C04848EB03E0A2000F15F0491301001F15F8A2003F15FCA3
90C8FC4815FEA54815FFB3A46C15FEA56D1301003F15FCA3001F15F8A26C6CEB03F0A36C
6CEB07E0000315C06D130F6C6CEB1F806C6CEB3F00013E137C90381F81F8903807FFE001
0090C7FC28447CC131>I<143014F013011303131F13FFB5FC13E713071200B3B3B0497E
497E007FB6FCA3204278C131>I<EB03FE90381FFFC0017F13F03901F80FFC3903C001FE
48486C7E000EC7EA7F8048EC3FC0ED1FE04815F00030140F007015F800601407126CB415
FC7F7F1503A46C4813076CC7FCC8FC16F8A2150F16F0151F16E0A2ED3FC0ED7F8016005D
5D4A5A4A5A4A5A5D4A5A4A5A4AC7FC147C5C5C495A495A495A49C7120C131E5B01381418
5B5B485A4848143848C81230000E1570001FB612F0A25A5AB712E0A326427BC131>I<49
B4FC010F13E0013F13FC9038FE01FE3A01F0007F80D803C0EB3FC048C7EA1FE0120EED0F
F0EA0FE0486C14F8A215077F5BA26C48130FEA03C0C813F0A3ED1FE0A2ED3FC01680ED7F
0015FE4A5AEC03F0EC1FC0D90FFFC7FC15F090380001FCEC007FED3F80ED1FC0ED0FE016
F0ED07F816FC150316FEA2150116FFA3121EEA7F80487EA416FE491303A2007EC713FC00
701407003015F80038140F6C15F06CEC1FE06C6CEB3FC0D803E0EB7F803A01FE01FE0039
007FFFF8010F13E0010190C7FC28447CC131>I<ED0380A21507150FA2151F153FA2157F
15FFA25CEC03BF153F14071406140C141C141814301470146014C013011480EB03005B13
065B131C13185B1370136013E0485A5B120390C7FC1206120E120C5A123812305A12E0B8
12C0A3C8383F8000ADEDFFE0027FEBFFC0A32A437DC231>I<000615C0D807C0130701FC
EB7F8090B612005D5D5D15E0158026063FFCC7FC90C9FCAE14FF010713C090381F01F090
383800FC01F0137ED807C07F49EB1F8016C090C7120F000615E0C8EA07F0A316F81503A2
16FCA5123E127F487EA416F890C712075A006015F0A20070140F003015E00038EC1FC07E
001EEC3F806CEC7F006C6C13FE6C6C485A3901F807F039007FFFE0011F90C7FCEB07F826
447BC131>I<EC07FCEC3FFF91B512C0903903FC03E0903907E000F0D91FC0133849C712
58017EEB01FC01FE1303491307485A485AA24848EB03F8000FEC01F092C7FC485AA3485A
A3127FA29038007F80903801FFF090380780FC39FF0E003E49EB1F8049EB0FC049EB07E0
136001E0EB03F04914F8150116FC5BED00FEA390C812FFA47EA57F123FA216FE121F1501
6D14FC120FED03F86C7EED07F06C6C14E06C6CEB0FC06C6CEB1F80017EEB3F0090383F80
FE90380FFFF8010313E00100138028447CC131>I<121CA2EA1F8090B712C0A3481680A2
17005E0038C8120C0030151C00705D0060153016705E5E4814014B5A4BC7FCC81206150E
5D151815385D156015E04A5AA24A5A140792C8FC5CA25C141E143EA2147E147CA214FCA2
1301A3495AA41307A6130FAA6D5AEB01C02A457BC231>I<14FF010713E0011F13F89038
7F00FE01FC133FD801F0EB1F804848EB0FC049EB07E00007EC03F048481301A290C713F8
481400A47FA26D130116F07F6C6CEB03E013FC6C6CEB07C09039FF800F806C9038C01F00
6CEBF03EECF87839007FFEF090383FFFC07F01077F6D13F8497F90381E7FFFD97C1F1380
496C13C02601E00313E048486C13F000079038007FF84848EB3FFC48C7120F003EEC07FE
150148140016FF167F48153FA2161FA56C151E007C153EA2007E153C003E157C6C15F86D
EB01F06C6CEB03E06C6CEB07C0D803F8EB1F80C6B4EBFF0090383FFFFC010F13F0010113
8028447CC131>I<14FF010713E0011F13F890387F80FC9038FC007E48487F4848EB1F80
4848EB0FC0000FEC07E0485AED03F0485A16F8007F140190C713FCA25AA216FE1500A516
FFA46C5CA36C7E5D121F7F000F5C6C6C1306150E6C6C5B6C6C5BD8007C5B90383F01E090
390FFF80FE903801FE0090C8FC150116FCA4ED03F8A216F0D80F801307486C14E0486C13
0F16C0ED1F80A249EB3F0049137E001EC75A001C495A000F495A3907E01FE06CB51280C6
49C7FCEB1FF028447CC131>I<121EEA7F80A2EAFFC0A4EA7F80A2EA1E00C7FCB3A5121E
EA7F80A2EAFFC0A4EA7F80A2EA1E000A2B78AA1B>I<121EEA7F80A2EAFFC0A4EA7F80A2
EA1E00C7FCB3A5121E127FEAFF80A213C0A4127F121E1200A512011380A3120313005A12
06120E120C121C5A5A12600A3E78AA1B>I<007FBAFCBB1280A3CEFCB0BB1280A36C1900
41187BA44C>61 D<16C04B7EA34B7EA34B7EA34B7EA3ED19FEA3ED30FFA203707FED607F
A203E07FEDC03FA2020180ED801FA2DA03007F160FA20206801607A24A6D7EA34A6D7EA3
4A6D7EA20270810260147FA202E08191B7FCA249820280C7121FA249C87F170FA2010682
1707A2496F7EA3496F7EA3496F7EA201788313F8486C83D80FFF03037FB500E0027FEBFF
C0A342477DC649>65 D<B8FC17E017FC00019039C00003FF6C6C4801007FEF3FC0717E71
7E717E84170384170184A760A21703601707604D5A4D5AEF7FC04DC7FCEE03FEEE3FF091
B65A17FC0280C7B47EEF1FC0EF0FF0717E717E717E717E1980187F19C0A2183F19E0A8F0
7FC0A2198018FF4D1300A24D5AEF0FFC4D5AEF7FE048486C903803FFC0B9C7FC17FC17C0
3B447CC345>I<DB0FFE146092B500C013E0020314F0913A0FFC01FC0191393FC0003E02
FFC7EA0F83D903FCEC03C74948EC01E74948EC00FF4948157F4948153F4948151F49C912
0F485A491607120348481603A248481601A248481600A2123FA2491760127FA31900485A
AE6C7EA21960A2123F7FA2001F18E07F000F18C0A26C6C160119806C6C160312016DEE07
006C6C16066D6C150E6D6C5D6D6C5D6D6C15786D6C5D6D6C4A5AD900FFEC0780DA3FC001
1FC7FCDA0FFC13FC0203B512F0020014C0DB0FFEC8FC3B487BC546>I<B8FC17F017FC00
019039C00007FF6C499038007FC0017FED1FE0EF07F0EF03FC717E717E84727E727E727E
A2727E85180385A2180185A38584A31A80AD1A00A36061A361180361180761180F614E5A
183F614EC7FC18FEEF03FC4D5AEF1FE001FFED7FC0486DD907FFC8FCB812FC17F094C9FC
41447CC34B>I<B912F8A3000101C0C7127F6C6C48EC07FC17011700187C183C181CA284
A31806A4180704067FA395C7FCA4160EA2161E163E16FE91B5FCA3EC8000163E161E160E
A21606A319C0A3F0018093C7FCA41803A21900A260A260A2181EA2183E187EEF01FE1707
48486C147FB95AA33A447CC342>I<B912F0A3000101C0C7127F6C6C48EC0FF817031701
170018781838A2181CA3180CA4180E1806160CA21800A5161CA2163C167CED01FC91B5FC
A3EC8001ED007C163C161CA2160CA793C8FCB08048487EB612F8A337447CC340>I<DB0F
FE146092B500C013E0020314F0913A0FFC01FC0191393FC0003E02FFC7EA0F83D903FCEC
03C74948EC01E74948EC00FF4948157F4948153F4948151F49C9120F485A491607120348
481603A248481601A248481600A2123FA2491760127FA396C7FC485AAD4CB612C06C7EA2
93C7387FF000725A003F171F7FA2121F7F120FA26C7EA26C7E6C7EA26C7E6D7E6D6C153F
6D7E6D6C157F6D6C15E7D903FEEC01C7D900FFEC0383DA3FE0EB0F01DA0FFCEBFE000203
B500F81360020002E090C7FCDB0FFEC9FC42487BC54D>I<B6D8C003B6FCA3000101E0C7
0007138026007F80913801FE00B3A991B7FCA30280C71201B3AC2601FFE0913807FF80B6
D8C003B6FCA340447CC349>I<B612F0A3C6EBF0006D5A6D5AB3B3B3A4497E497EB612F0
A31C447DC323>I<010FB512FEA3D9000313806E130080B3B3AB123F487E487EA44A5A13
801300006C495A00705C6C13076C5C6C495A6CEB1F802603E07FC7FC3800FFFCEB1FE027
467BC332>I<B600C049B512C0A3000101E0C8387FFC006C49ED3FE06D481680063EC7FC
183C183860604D5A4D5A4DC8FC171E17385F5F4C5A4C5A4CC9FC160E5E5E5E5E4B5A4B7E
4B7E150F4B7E4B7E1577EDE3FE913881C1FFEC8381DA87007F028E6D7E149C02B86D7E02
F06D7E14C04A6D7E707EA2707E707EA2707F717EA2717E717EA2717E717EA2717E717EA2
717F8585496C82486D4A13FCB600C0011FEBFFE0A343447CC34C>I<B612F8A3000101E0
C9FC6C6C5A5CB3B31830A418701860A518E0A3EF01C0A217031707A2170F173F177FEE01
FF48486C011F1380B9FCA334447CC33D>I<B56C933807FFFC6E5EA20001F1FE0026006F
E0EE1BF8A3D967F01633A2D963F81663A3D961FC16C3A3D960FEED0183A2027FED0303A3
6E6C1406A36E6C140CA26E6C1418A36E6C1430A36E6C1460A26E6C14C0A36E6CEB0180A3
037FEB0300A292383F8006A36F6C5AA36F6C5AA26F6C5AA36F6C5AA36F6C5AA26FB45AA3
70C7FC13F0A2486C143ED80FFFEF0FFEB500F0011C0107B512FCA34E447BC359>I<B56C
020FB5FC8080C6040013F06D6CED1F80D96FF8ED0F00A2D967FC1506EB63FEA2EB61FF01
607FA26E7E6E7EA26E7E6E7EA26E7E6E7EA26E7E6E7FA26F7E6F7EA26F7E6F7EA26F7E6F
7EA26F7E6F1380A2EE7FC0EE3FE0A2EE1FF0EE0FF8A2EE07FCEE03FEA2EE01FF701386A2
EF7FC6EF3FE6A2EF1FF6EF0FFEA217071703A217011700A201F0167E183E487ED80FFF16
1EB500F0150EA2180640447CC349>I<ED1FFC4AB512C0913907F007F091391F8000FC02
7EC7123FD901F8EC0FC049486E7E49486E7E49486E7E49486E7E49C9127E017E8201FE83
4848707E4848707EA24848707EA2000F84491603001F84A24848707EA3007F84A24982A3
00FF1980AD6C6C4C1300A4003F606D1603A2001F60A26C6C4C5AA26C6C4C5AA20003606D
161F6C6C4C5A000060017F4CC7FC6E5D013F5E6D6C4A5AD907E0EC03F06D6C4A5AD901FC
EC1FC0D9007E4AC8FCDA1F8013FC913907F007F00201B512C09126001FFCC9FC41487BC5
4C>I<B712FCEEFFC017F800019039C0000FFC6C6C48EB01FF9338007F80EF1FE0170FEF
07F018F8EF03FCA218FE1701A218FFA718FEA2170318FCA2EF07F818F0EF0FE0EF1FC0EF
7F80933801FE00EE0FFC91B612F017800280C9FCB3AA3801FFE0B612C0A338447CC342>
I<ED1FFC4AB512C0913907F007F091391F8000FC027EC7123F4948EC1FC0D903F0EC07E0
49486E7E49486E7E49486E7E49C9127E49167F01FE707E4848707E00038449160F000784
491607000F84A24848707EA2003F84491601A2007F84A34982A200FF1980AD007F19006D
5EA3003F60A26D1603001F60A2000F606D16070007606DD903F0130F0003DA0FFC5C6DD9
1C0E131F00014A6C5C6C6C903A3003803F80017FD9700149C7FC92386000C0D93F8015FE
D91FC0ECE1FCD907E0EC63F0D903F0EC77E0902601FC70EB7FC09026007E3091C8FCDA1F
B813FC912707FC07F814C00201B57E9139001FFC3C92C7FC053E1301171E051F13031A80
F08007F0C00F94380FF03F95B51200A28361715BA2715B9438007FE0F01F8042597BC54C
>I<B712E016FF17C000019039C0003FF86C6C48EB03FCEE00FF717E717E717E717E717E
A284170384A760A21707604D5AA24D5A4D5A4DC8FCEE01FEEE07F8EE3FE091B6C9FC16FC
913980007F80EE0FE0707EEE03FC707E160083717EA2717EA784A71A6084171FA21AE071
6C13C02601FFE002071301B600C01680943801FC03943900FE0700CBEA3FFEF007F84346
7CC348>I<49B41303010FEBE007013F13F89039FE00FE0FD801F8131FD807E0EB079F49
EB03DF48486DB4FC48C8FC4881003E81127E82127C00FC81A282A37E82A27EA26C6C91C7
FC7F7FEA3FF813FE381FFFE06C13FE6CEBFFE06C14FC6C14FF6C15C0013F14F0010F8001
0180D9001F7F14019138001FFF03031380816F13C0167F163F161F17E000C0150FA31607
A37EA36C16C0160F7E17806C151F6C16006C5D6D147ED8FBC05CD8F9F0495AD8F07C495A
90393FC00FE0D8E00FB51280010149C7FC39C0003FF02B487BC536>I<003FB912F8A390
3BF0001FF8001F01806D481303003EC7150048187C0078183CA20070181CA30060180CA5
481806A5C81600B3B3A54B7EED7FFE49B77EA33F447DC346>I<B600C0010FB5FCA30001
01E0C813F026007F80ED1F80F00F00A21806B3B3A7180E6D6C150CA2181C131F6E151801
0F163818306D6C1570606D6C14016D6C5D6D6CEC0780027F4AC7FC6E6C131EDA1FE0137C
913907FC03F00201B55A6E6C1380DB07FCC8FC40467CC349>I<B692383FFFF0A3000301
E003071300C649ED01FC4A5E017F705A6E5E133F616E1501011F5FA26D6C4BC7FCA28001
071606A26E150E0103160CA26D6C5DA2806D5EA26F1470027F156081023F5DA281021F4A
5AA26F1303020F92C8FC8102071406A26F130E0203140CA26E6C5BA2816E5CA2EE807003
7F1360A26F6C5AA216E092381FE180A216F3030F90C9FC16FBED07FEA36F5AA36F5AA26F
5AA3166044467EC349>I<B60107B500F890380FFFFEA3000301E0D9001F90C813F06C01
80DA0FFCED3FC091C86C48ED1F006C871C0E6D6C6E7E1C0CA26D6C6F5DA36EDA06FF1538
011F1A30A26E020E6D1470010FDB0C7F1560A26E021C7F0107DB183F5DA2856D6CDA301F
4A5AA36D6C4A6C6C49C7FCA36D6C4A6C6C1306A3DB80016E130E027FDA8003140CA2DBC0
0380023FDA00015CA203E081021F01066D5CA36E6C486E6C5AA36E6C486E6C5AA36F48EC
1FE1020360A2DBFE7015F302010160020F90C8FCA2DBFFE015FB6E49EC07FEA36F486E5A
A36FC86C5AA3031E6F5AA4030C16605F467EC364>I<B66C91380FFFFCA3000101F8C800
0313C026007FE0923800FE0061013F17F06D6C5E80010F5F6D6C4B5A18036D6C93C7FC6E
15066D160E6D6D140C181C6E6C14186E6C5C18706E6C146018E06E6C5C6E6C495A17036E
6C91C8FC5F6E6C13066E6D5A171C92387FC0185FED3FE06F6C5A17E06F6C5AEEF980ED07
FF6F90C9FCA26F5AB3A6923807FF800203B6FCA346447FC349>89
D<001FB81280A39126800001130001FCC7FC01F04A5A01C04A5A5B90C8485A121E4C5A48
4B5AA200384B5A4C5AA24B90C7FC00304A5AA24B5AA24B5AC8485AA24B5A4B5AA24B5A5C
93C8FC4A5AA24A5A4A5AA24A5A4A5AA24A5A14FF5D4990C9FCEF0180495A495AA2495A49
4814031800495AA2495A495A5F4890C8FC485A5F485A48485D5F48485D17FE4848140348
48140F16FFB8FCA331447BC33C>I<EAFFFCA4EAF000B3B3B3B3B3A2EAFFFCA40E6476CA
1B>I<01C01318000114384848137048C712E0000EEB01C0000C1480001C130300181400
00385B003013060070130E0060130CA300E0131C481318A400CFEB19E039FFC01FF801E0
13FCA3007F130FA2003F130701C013F8390F0001E01E1D71C431>I<EAFFFCA4EA003CB3
B3B3B3B3A2EAFFFCA40E647ECA1B>I<EB07FC90383FFF809038F80FE03903C003F048C6
6C7E000E6D7ED80FC0137E486C137F6D6D7EA36F7EA26C5AEA0380C8FCA4EC0FFF49B5FC
90380FFE1FEB3FC0EBFF00EA03FC485A485A485A485A127F5B176048C7FCA3153FA36D13
7F007F14EF6D9038C7E0C0003F13013A1FE00783F13B07F81E03FF802701FFFC0113003A
001FE0007C2B2E7CAC31>97 D<EA01FC12FFA3120712031201B3EC03FC91380FFF809138
3C07E091387001F89039FDE0007E02807F01FFEC1F8091C713C049EC0FE049140717F0A2
EE03F8A217FCA2160117FEAB17FC1603A217F8A2EE07F0A26DEC0FE017C06D141F01FBEC
3F80D9F380EB7E00D9E1C05B9039E0F001F89039C03C07E09039801FFF80C7D803FCC7FC
2F467DC436>I<EC7F80903803FFF090380FC07C90383F000F01FCEB03804848EB01C000
03140F4848EB1FE049133F120F485AA2485AED1FC0007FEC070092C7FCA290C9FC5AAB7E
7FA2123F16307F001F15706C6C146016E06C6C14C06C6C13010001EC03806C6CEB070001
3F131E90381FC078903807FFF001001380242E7DAC2B>I<167FED3FFFA315018182B3EC
7F80903803FFF090380FC07C90383F000E017E1307496D5AD803F87F48487F5B000F8148
5AA2485AA2127FA290C8FC5AAB7E7FA2123FA26C7EA2000F5D7F6C6C5B00035C6C6C9038
077F806C6C010E13C0013F011C13FE90380FC0F8903803FFE09026007F0013002F467DC4
36>I<EB01FE903807FFC090381F03F090387E00FC49137E48487F485A4848EB1F80000F
15C049130F121F484814E01507A2007F15F090C7FCA25AA390B6FCA290C9FCA67EA27FA2
123F16306C7E1670000F15606D14E06C6C14C0000314016C6CEB03806C6CEB0700013E13
1E90381F80F8903803FFE0010090C7FC242E7DAC2B>I<EC0FE0EC7FF8903801F81E9038
03F03F90390FE07F8090381FC0FF5C133F495AA2ED7F0001FE131C92C7FCAFB67EA3C648
C8FCB3B2486C7E007F13FFA321467EC51E>I<EE0F80D901FCEB7FE0903A0FFF81F0F090
393F07E3819039FC01FF033A01F800FE014848017E13E00007027FC7FC497F000F814913
1F001F81A9000F5D6D133F000792C7FC6D5B0003147E6C6C5B6D485A3903BF07E090380F
FF80260701FCC8FC90CAFCA25AA37F6C7E7F90B512F86C14FF16E06C15F86C6C8048B67E
3A07C0000FFF48481300003FC8EA3F80003E151F48ED0FC0A2481507A56C150F007C1680
007E151F003E16006C153E6C6C5CD807E0495AD801F8EB07E0D8007FEB3F8090261FFFFE
C7FC010113E02C427DAC31>I<EA01FC12FFA3120712031201B3EC01FE913807FFC09138
1E07F091383801F802707FECE000D9FDC07F5C01FF147F91C7FCA25BA35BB3A8486CECFF
80B5D8F83F13FEA32F457DC436>I<EA01E0EA07F8A2487EA46C5AA2EA01E0C8FCADEA01
FC12FFA3120712031201B3B0487EB512F8A315437DC21C>I<143C14FFA2491380A46D13
00A2143C91C7FCADEC7F80EB3FFFA31300147F143FB3B3AA123E127F39FF807F00A2147E
A25C6C485A383C01F06C485A3807FF80D801FEC7FC195785C21E>I<EA01FC12FFA31207
12031201B3A292381FFFE0A36F1300ED07F816E05E5E030EC7FC5D5D5D5D4A5A4A5A4AC8
FC5CEC3F804A7E14FF9038FDCFE09038FF8FF01407496C7E01FC7F14016E7E81816F7E82
151F6F7E821507826F7E8282486C491380B5D8F81F13F8A32D457DC433>I<EA01FC12FF
A3120712031201B3B3B3A5487EB512F8A315457DC41C>I<D801FC01FFEC1FE000FF0107
01E0EBFFFC913B0F03F801E07F913C3C01FC07803F800007903C7000FE0E001FC0000349
D97E1C130F2601FDC0D97F38804A143001FFDA3FF06D7E91C75BA2495DA3495DB3A8486C
4A6C497EB5D8F81FB50003B512E0A34B2C7DAB52>I<3901FC01FE00FF903807FFC09138
1E07F091383801F8000701707F0003EBE0002601FDC07F5C01FF147F91C7FCA25BA35BB3
A8486CECFF80B5D8F83F13FEA32F2C7DAB36>I<EC7F80903803FFF090380FC0FC90383E
001F496D7E496D7E48486D7E48486D7E48486D7E000F81A24848147E003F157FA290C87E
481680A44816C0AA6C1680A26D147F003F1600A2001F157E6D14FE000F5D6D130100075D
6C6C495A6C6C495A6C6C495A013E49C7FC90381FC0FE903807FFF89038007F802A2E7DAC
31>I<3901FC03FC00FF90380FFF8091383C07E091387001F83A07FDE000FE0001018013
7F01FFEC3F8091C7EA1FC04915E049140F17F0160717F8160317FCA3EE01FEABEE03FCA3
EE07F8A217F0160F6D15E0EE1FC06D143F17806EEB7E00D9FDC05B9039FCF003F891383C
0FE091381FFF80DA03FCC7FC91C9FCAE487EB512F8A32F3F7DAB36>I<91387F80039039
03FFE00790380FE07890393F801C0F90387E000E496D5AD803F8EB039F0007EC01BF4914
FF48487F121F5B003F81A2485AA348C8FCAB6C7EA3123F7F121F6D5C120F6D5B12076C6C
5B6C6C497E6C6C130E013F131C90380FC0F8903803FFE09038007F0091C7FCAEEEFF8003
3F13FEA32F3F7DAB33>I<3903F803F000FFEB1FFCEC3C3EEC707F0007EBE0FF3803F9C0
00015B13FBEC007E153C01FF13005BA45BB3A748B4FCB512FEA3202C7DAB26>I<90383F
E0183901FFFC383907E01F78390F0003F8001E1301481300007C1478127800F81438A215
18A27EA27E6C6C13006C7E13FC383FFFE06C13FC6C13FF6C14C06C14E0C614F0011F13F8
1300EC0FFC140300C0EB01FE1400157E7E153EA27EA36C143C6C147C15786C14F86CEB01
F039F38003E039F1F00F8039E07FFE0038C00FF01F2E7DAC26>I<1306A5130EA4131EA3
133E137EA213FE12011207001FB512F0B6FCA2C648C7FCB3A4150CAA017E131C017F1318
A26D133890381F8030ECC070903807E0E0903801FFC09038007F001E3E7EBC26>I<D801
FC147F00FFEC3FFFA300071401000380000181B3A85EA35DA212006D5B017E9038077F80
017F010E13C06D011C13FE90380FC078903803FFF09026007F8013002F2D7DAB36>I<B5
39F001FFFCA3000790C7EA7FE06C48EC1F8000011600160E1200160C017F5CA280013F5C
A26E1370011F146080010F5CA2ECF00101075CA26D6C48C7FCA26E5A01011306A26D6C5A
A214FF6E5AA215B8EC3FB015F06E5AA36E5AA26E5AA36EC8FC2E2C7EAA33>I<B500E0B5
39E03FFF80A30007903C000FFE000FFC00D803FCD903F8EB03F8F001E0120103015D6D80
000060A26D6E13036DD9037E91C7FCA20280017F5B013FD9063F1306A2D91FC06E5AED0C
1FA2D90FE06E5AED180FA2D907F06E5AED3007A2D903F86E5AED6003A2902601FCE06D5A
EDC00117FCD900FFECFD80ED800017FF027F92C8FC92C77EA26E147E023E143EA2021E14
3C021C141CA2412C7EAA46>I<B539F007FFFCA30003D9C00113C0C6496C1300017F14FC
013F5C6E13E06D7E010F495A6D6C485A02F890C7FC903803FC060101130E6E5A903800FF
186E5AEC3FF05D141F140F6E7E81140FEC0DFCEC19FEEC38FF4A7E9138603F8002C07F01
01131F49486C7E02007F01066D7E010E1303496D7E013C80017C80D801FC1580D80FFE49
13C0B5D8800F13FFA3302B7FAA33>I<B539F001FFFCA3000790C7EA7FE06C48EC1F8000
011600160E0000150C6D141C6D1418A26E1338013F1430A26D6C5BA26E13E0010F5CA26D
6C485AA2ECF803010391C7FCA2903801FC06A2ECFE0E0100130CA2EC7F18A215B8EC3FB0
A2EC1FE0A36E5AA26E5AA36EC8FCA21406A35CA25CA2123C007E5BB4FC5CA25CEAFE0138
7C0380D87007C9FCEA3C1EEA0FFCEA03F02E3F7EAA33>I<003FB612E0A29038C0003F90
C713C0003CEC7F800038ECFF00A20030495A0070495AA24A5A0060495AA24A5A4A5AA2C7
485A4AC7FC5B5C495A13075C495A131F4A1360495A495AA249C712C0485AA2485A485A15
01485A48481303A24848EB07804848131F00FF14FF90B6FCA2232B7DAA2B>I<B9FCA230
02809B31>I E /Fs 19 119 df[<93381FFFF00303B612E0033F15FC4AB812C0020717F0
021F17FC027F17FF49BA12C0010719F049DA800F814901F8C715FE4901C0021F804948C8
00078149486F814801F00300814849708048018070804890CA6C806E70804813F002FC70
80486D70158080486E6F15C0817315E081B6836F19F0A3861DF8A56C5CA26C5CA26C5C6C
91CAFC6C5B000113F826007FE01AF090CCFC62A21DE0A297B6FC1DC0A24F1580A24F1500
64A24F5C64614F5C644F5C644F91C7FC96B55A4E5C634E5C4E5C4E5C634E49C8FC4E5B4E
5B95B55A4D14C0624D91C9FC4D13FC4D5B4D5B4D13C04D5B94B5CAFC4C13FC4C5B4C5B4C
49ED0FF84C13804C90C9FC4C5A4C48EE1FF04B5B4B13E04B5B4B5B4B90CAFCDB3FFC173F
4B4818E04B5A4A5B4A49177F4A90CBFC4A4818FF5D4A485F4A48053F13C04ABBFC91BCFC
5B5B5B5B491B805B5B90BDFC5A5A5A5A481C005A5ABEFCA464A4>93
135 117 262 116 50 D[<0803B500C0EE01F00703B600FEEE03F8077FDBFFE015070607
B800FC150F063F05FF151F4DBA00E0143F050F07F8147F053F07FE14FF94BC5B04039326
F8000FECC003040F4BC86CEBF007043F03C0030F6D5A93B648C900036D5A4B03F0933900
7FFF3F030703C0051F90B5FC4B92CB7E033F02FC18034B02F08492B648844A0380193F4A
92CD7E4A4A864A4A864A02F0864A4A864A8991B65A494B874992CF7E4C885B494A885E49
8B494A88A2495C8D90B65A8D5A5E48217FA24892D1FC223FA25A5DA248211FA3485CFA0F
F09FC7FCA25AA45DA3B6FCB27EA381A47EA46C80FA07F0FA0FF87EA2817EA36C6F1D1F23
F07E827E223F6D6E1EE0A26D6E1D7F23C06D6E1DFF7F705213806D806D55130070646D6F
646D6F515A6E6E1B1F6E6E515A6E6E515A6E6E1BFF6E6E505B6E6E505B6E6F4F5B6E03E0
4F90C7FC6F6EF13FFE6F02FC4F5A030F02FF4E485A6F03C005075B030103F0051F5B6F03
FE057F1380043FDAFFE00303B5C8FC040F03FE033F13FC0403DBFFF80107B55A040093B8
12E0053F1A80050F4FC9FC050119F8DD003F18C0060795CAFCDE007F16F0070393CBFCDF
000314C0>141 146 115 271 168 67 D[<000FC312F8A6488EA304C0C7001F4AC71201
03F8C8F0000F03C01C0192C9737E02FC1E1F4A1E0702E08A4A8A4A8A4890CA757EA24920
3F49201FA349200FA2492007A4492003007F8EA4498CA848487A1380A6CC99C7FCB3B3B3
B3AA030FBD12FCA9>145 140 120 267 162 84 D<93B512FC037FECFFF00207B8FC023F
17E091B912F84918FE0107727E499126C0007F14E04901E0C7000F80496D020380496D02
0014FE6F6F7F90B570806F6F8085486E6F807380A27380A28885886C5CA26D4982886D5B
6D5B010713C0010190CAFC90CCFCA90603B7FC050FB8FC0403B9FC167F0307BAFC153F4A
B7EA807F020FEDE000023F02FCC7FC91B612E0010392C8FC4914FC011F14F04914C0495C
90B548C9FC485C485C485C485C5A5D485CA24891CAFCA3B6FC5CA397B6FCA461806C60F1
07EF6C6E150F6F16CF6C183F6FDB7F8F806C6EDBFF0F14E06C02FCDA03FE15FE6C6E9126
0FFC0791B5FC6C6E6CD93FF817806C923AF803FFF003013F91B6487E010FEF8000010394
C77E010004FC141F021F03F0140702010380DA007F1400DA000701F8CDFC695F79DD71>
97 D[<ED1FF0017FB5FCB7FCA9EA003F1307A27FB3B296383FFFC00607B512FE063FECFF
E04DB712F8050716FF051F17C0057F17F094B5D8C00F8004F301FCC714FE04F701E0023F
7F93B50080020F804DC86C14E005F80301804D6F804D707F05808294CA804C717F4C7180
A24C71808BA27680A28B88A28BA28BA3888BA52080B02000A56764A267A3676467A2525C
A267647062704D91C7FC704D5BA2714C5B7193B55A05F04B5CDCBFF84B5CDC1FFC030F5C
4B6CB44B91C8FC7001C0027F5B4B6C01F00103B55A4BC601FF013F14F04B6D90B712C04B
011F94C9FC4B6D16FC4B010316F092C86C15804A030F02F8CAFC90CB49CBFC>113
144 121 270 129 I<94387FFFF0041FB612E093B712FE0307707E031F17F092B97E4A18
FE020784021F9126F8000F14804A0280010014C04A49C74814E049B500F85C494A17F049
4A5C495C494A4A14F84991C8FC5D495B90B5FC5D5A485C7314F05A4B6F14E05A7314C048
7214804B93383FFE00F20FF84896C8FCA4485CA5B6FCB07EA281A37EA36C80A37E6F18FE
6CF201FFA26C6E5F1CFE6C801B076C6EEF0FFC6D7F70EE1FF86DF13FF06D6E167F6D6EEE
FFE06D02F84B13C06D6E5D6D02FF030F13806D03C0023F1300023F02F0903801FFFC6E91
26FF801F5B020792B65A6E18C0020060033F4CC7FC030716F8030016C0041F4AC8FCDC00
7F13C0585F78DD67>I<94387FFFC0040FB6FC93B712E0030716FC031F16FF037F17C04A
B912F00207DAF80380021F912680003F13FE4A49C7000F7F4A01F802038049B5486E8049
02C06E6C7F494A6F7F4991C9FC49727F4949707F4B84498490B548707F5A4B198048855D
481CC086481CE05D5A871DF05AA25D5AA21DF887A2B6FCA392BBFCA51DF00380CDFCA77E
A4817EA37EA2817EA26CF307F06FF00FF87E816C1B1F6F19F06C1B3F6D6DF07FE06D7FF4
FFC06D6E4C13806D6E5E6D02F04C13006D6EEE1FFE6D6E4C5A6D6C01FFEEFFF86E02E002
035B6E02FC021F5B02079126FFC003B55A6E92B7C7FC020060033F17F8030F17E0030117
80DB003F03FCC8FC040315C0DC000F01F8C9FC5D5F7ADD6A>101
D[<ED1FF0017FB5FCB7FCA9EA003F1307A27FB3B2963803FFFC073FEBFFE096B612F806
0715FE061F6F7E4E16E095B87E4DD9FC03804DD9C000804D48C76C7FDD0FF880DD1FE082
4D486E804D5A05FEC881DCF1FC815F04F385EEF7F04D81EEFFC0A24D84A294C9FCA25EA3
5EA45EB3B3AFB9D8E001B912C0A9>114 143 119 270 129 104
D[<EC3FC0ECFFF0010313FC497F497F498049804980A290B67EA24881A86C5DA26D5CA2
6D5C6D5C6D91C8FC6D5B6D5B010013F0EC3FC091CAFCB3A3ED1FF0017FB5FCB7FCA9EA00
3F1307A27FB3B3B3B0B91280A9>49 144 119 271 65 I[<ED1FF0017FB5FCB7FCA9EA00
3F1307A27FB3B3B3B3B3B3ACB912C0A9>50 143 119 270 65 108
D<DB3FE0912601FFFC943801FFFC017FB5031FD9FFE0041FEBFFE0B792B600FC93B612FC
060303FF030315FF060F04C0020F16C0063F04F0023F16F095B86C91B87E4DD9FC036E49
D9FC03804DD9C0006E49D9C000804D48C7003F6D4948C7003F7FDD0FF86EDB0FF880D800
3F4B48714848830107DB3FC06E9126C03FC06E804D484E5A6D4BC86F48C881DCE1FE6FDA
E1FE814D61DCE3F8DEF3F884DCE7F0F0F7F04D6F4B81DCEFC0F0FFC0A2DCFF804F84A294
C993C9FCA24C61A34C61A44C61B3B3AFB900E090B900E090B912E0A9B35D77DCC2>I<DB
3FE0913803FFFC017FB5033FEBFFE0B792B612F8060715FE061F6F7E4E16E095B87E4DD9
FC03804DD9C000804D48C76C7FDD0FF880D8003FDB1FE08201074B486E804D5A6D03FEC8
81DCE1FC815F04E385EEE7F04D81EEEFC0A2DCFF8084A294C9FCA25EA35EA45EB3B3AFB9
D8E001B912C0A9725D77DC81>I<94381FFFF00407B612C0047F15FC0303B87E030F17E0
037F17FC4ABAFC4A9126FC007F80020F02C0010714E04A49C880027F01F8033F13FC91B5
486F7F4902C003077F494A6F804991C96C80494970804949717F49874949717FA290B548
717F48884B83481D80A2481DC04B83481DE0A2481DF0A3484A7114F8A4481DFCA5B61BFE
AF6C1DFCA56C6E4D14F8A36C1DF0A36C1DE06F5F6C1DC0A26C6E4D1480A26C1D006F5F6C
646D6D4D5B6F94B5FC6D636D6D4C5C6D6E4B5C6D6E4B5C6D02F0031F5C6D6E4B91C7FC6D
6C01FE92B512FC6ED9FFC001075C6E02FC017F5C020791B812C0020196C8FC6E6C17FC03
1F17F003031780DB007F03FCC9FC040715C0DC001F01F0CAFC675F7ADD74>I<DB1FF091
381FFFC0017FB50203B6FCB7021F15E095B712FC050316FF050F17C0053F17F094B912FC
04F1DAC01F8004F79026FC00018093B500E06D6C14C0D8003F93C86C8001074B030F8005
F86F806D03E06F804D6F804D8194CA6C7F4C864C71805E7680A27680A27680A28B88A28B
A288A28BA4882080B0200064A467A26467A3525CA26764676467647062704D91C7FC7094
B55AA2714B5C714B5C714B5C05F84B5C71033F5C05FF4B91C8FC06C049B55A04FB01F001
075C04F801FF017F14F07190B712C0051F94C9FC7116FC050316F0DD007F1580060F02F8
CAFC060049CBFC96CDFCB3ACB912E0A9718579DC81>I<DB7FC049B47E90B6021F13F8B7
027F13FE4DB67E4D15E04D814D814D01077F94263FF00F7F94387FC01F4D48487FD8003F
16000107DAC1FE491480EEC3FC6D5DEEC7F05F16CF5F16DF4D6D1400A204FFC76C5BA273
5B4C6E5B735B070013C04C92C8FCA45EA65EB3B3AAB912FCA9515D79DC5F>114
D<92261FFFF814F80203B638C001FC023FEDFC0791B8121F010317FF130F013F9038F800
1F4990C8FCD9FFF8153F4801E0150F484915034849814890CAFC197F4848173F191F485A
A2007F180FA31907487EA27FA28002E0705A6E93C8FC14FC14FF15F06CECFF8016FCEEFF
F06CEEFF8018F06C17FE727E6C18E0856C18FC6C846C727E6C856D84011F846D84130301
0084023F83140F020183EC001FDB007F16801603DC000F15C01700183F060F14E0007F17
03486C82727E857F85857FA2857F1BC07FA27F1B806D5F7F1B006E5E6E5F6E163F6E4C5A
02FC4C5A6E03035B6E6C4A5B03F0023F5B03FF0107B55A01F991B7C7FCD9F07F16FCD9E0
1F16F0D9800716C0D9000193C8FC48D9003F14F8007C020349C9FC4B5F78DD5C>I[<ED03
FEA81507A5150FA4151FA3153FA2157FA215FFA25CA25C5CA25C5C5C5C91B5FC13035B13
1F017F91B712F00007BAFCBBFCA7C74AC9FCB3B3AAF101FFB1616E17FE82A219076E17FC
836EEE0FF871131F6E6EEB3FF071137F6E6EEBFFE06EDAFF0313C06E92B512806E170003
3F5D6F5D03075D030015E0041F1480040001FCC7FC>72 132 124
258 90 I<DB0FF8F01FF0017FB594B6FCB74BB7FCA9D8003F94C77E0107190FA26D85B3
B3B063A463A263A27F6398B6FCA26DF001FB7015036EEF07F3E00FE3806E6D151FE07FC3
14FF6E6D6CDAFF83EDFFC06E6E010313036E02FCEB3FFE6E91B612FC020017F86F16E003
1F16800303EDFE00DB007F14F8040102C093C8FC725E77DC81>I<B90303B7FCA9D80007
02F8CA000FEBFE006D6E050013E0666D6E6164826D5090C7FC836E4F5AA26E6E4C5AA26E
6E4C5AA26E6E5F1C3F836E4F5A836E4F5AA26E6E4B5BA26E6E4B90C8FCA26F6E5D1B0784
6F4D5A846F4D5AA26F6E4A5AA26F6E4A5AA26F6E5D1BFF846F4C5B846F4C90C9FCA2706E
485AA27002C05B1A0F7002E05B1A1F19F0704B5A19F8704B5AA2706E485AA2706E5B96B5
FC7093CAFCA3715CA2715CA2715CA2715CA3715CA2715CA2715CA27191CBFCA2725AA372
5A725A725A705D7BDB7B>I E end
TeXDict begin
%%PaperSize: a4
%%BeginPaperSize: a4
a4
%%EndPaperSize

13 0 bop -116 710 a Fs(Chapter)78 b(2)-116 1152 y(T)-19
b(ransitiv)-6 b(e)75 b(closure)i(problem)-116 1618 y
Fr(In)39 b(this)g(c)m(hapter,)j(w)m(e)e(de\014ne)h(the)e(transitiv)m(e)
g(closure)g(problem)f(and)h(the)h(terminology)d(needed)k(in)d(our)-116
1752 y(study)-8 b(.)41 b(W)-8 b(e)22 b(also)f(describ)s(e)i(brie\015y)f
(other)g(problems)g(that)f(are)i(related)e(to)h(the)g(transitiv)m(e)g
(closure)g(problem.)-116 1885 y(After)32 b(that,)h(w)m(e)h(review)f
(previous)g(solutions)e(to)i(the)g(problem.)-116 2238
y Fq(2.1)160 b(Graph)54 b(theoretic)e(preliminaries)-116
2470 y Fr(Since)32 b(the)g(de\014nitions)g(of)g(graph)g(theoretical)e
(concepts)k(di\013er)e(somewhat)g(in)f(the)i(literature,)d(w)m(e)k
(de\014ne)-116 2604 y(here)44 b(the)f(basic)g(concepts.)77
b(The)44 b(de\014nitions)f(are)g(adapted)h(from)d(references)46
b([10)o(,)d(11,)g(89,)g(107)o(,)g(114,)-116 2737 y(118)o(].)51
b(A)36 b(reader)f(who)h(is)e(familiar)d(with)k(graph)g(theory)h(ma)m(y)
f(skip)g(this)g(subsection)h(and)f(refer)h(to)f(these)-116
2871 y(de\014nitions)j(later)f(if)g(it)h(is)f(needed.)63
b(W)-8 b(e)39 b(de\014ne)g(some)f(other)h(concepts)h(later)d(in)h(the)h
(text)g(where)g(their)-116 3004 y(relev)-5 b(ance)33
b(is)f(more)g(ob)m(vious.)-116 3218 y Fp(De\014nition)p
Fr(.)70 b(A)35 b(directed)h Fo(gr)-5 b(aph)43 b Fn(G)35
b Fr(is)g(a)g(pair)g(\()p Fn(V)5 b(;)17 b(E)6 b Fr(\))35
b(where)i Fn(V)57 b Fr(is)35 b(a)h(set)g(of)f(elemen)m(ts)h(called)e
Fo(vertic)-5 b(es)-116 3351 y Fr(and)37 b Fn(E)42 b Fm(\022)36
b Fn(V)46 b Fm(\002)26 b Fn(V)59 b Fr(is)37 b(a)f(set)i(of)f(ordered)h
(pairs)e(called)g Fo(e)-5 b(dges)p Fr(.)57 b(The)38 b(cardinalit)m(y)d
(of)i Fn(V)59 b Fr(is)36 b(denoted)j(b)m(y)f Fn(n)-116
3485 y Fr(and)31 b(the)h(cardinalit)m(y)e(of)h Fn(E)37
b Fr(b)m(y)c Fn(e)p Fr(.)43 b(The)32 b Fo(size)i(of)f(gr)-5
b(aph)33 b Fn(G)f Fr(is)f Fn(n)20 b Fr(+)f Fn(e)p Fr(.)44
b(Giv)m(en)31 b(an)g(edge)h(\()p Fn(v)t(;)17 b(w)s Fr(\),)31
b Fn(v)k Fr(is)c(the)h Fo(tail)-116 3618 y Fr(and)h Fn(w)j
Fr(the)e Fo(he)-5 b(ad)43 b Fr(of)33 b(the)h(edge.)47
b(A)33 b Fo(sub)-5 b(gr)g(aph)41 b Fr(of)33 b(a)g(graph)g
Fn(G)c Fr(=)g(\()p Fn(V)5 b(;)17 b(E)6 b Fr(\))34 b(is)f(a)g(graph)g
Fn(S)i Fr(=)29 b(\()p Fn(V)3387 3582 y Fl(0)3410 3618
y Fn(;)17 b(E)3532 3582 y Fl(0)3555 3618 y Fr(\))34 b(where)-116
3752 y Fn(V)-38 3716 y Fl(0)13 3752 y Fm(\022)28 b Fn(V)55
b Fr(and)32 b Fn(E)497 3716 y Fl(0)548 3752 y Fm(\022)c
Fn(E)6 b Fr(.)30 3965 y(In)28 b(this)e(thesis,)j(w)m(e)g(study)f(only)f
(directed)g(graphs.)42 b(F)-8 b(rom)26 b(here)i(on,)g(the)g(w)m(ord)g
(\\graph")e(alw)m(a)m(ys)i(refers)-116 4099 y(to)k(a)g(directed)h
(graph;)g(w)m(e)g(omit)e(the)i(quali\014er)f(\\directed.")43
b(The)34 b(graphs)e(that)h(w)m(e)g(consider)g(are)g(\014nite.)30
4232 y(Some)40 b(presen)m(tations,)k(e.g.,)g([89)o(],)f(prohibit)c
(self-lo)s(op)g(edges)j(of)e(form)g(\()p Fn(v)t(;)17
b(v)t Fr(\))40 b(in)g(a)g(graph.)68 b(A)41 b(con-)-116
4366 y(sequence)k(is)d(that)g(the)g(transitiv)m(e)g(closure)g(of)g(a)g
(cyclic)g(graph)g(is)g(not)g(a)g(graph,)j(since)d(it)g(alw)m(a)m(ys)g
(has)-116 4500 y(self-lo)s(ops.)g(Since)32 b(the)h(self-lo)s(ops)e(in)m
(tro)s(duce)i(no)f(di\016culties)g(in)f(our)i(presen)m(tation,)g(w)m(e)
h(allo)m(w)d(them.)-116 4713 y Fp(De\014nition)p Fr(.)59
b(If)31 b(\()p Fn(u;)17 b(v)t Fr(\))29 b(is)h(an)g(edge)h(of)f
Fn(G)p Fr(,)h(w)m(e)g(sa)m(y)g(that)g Fn(u)e Fr(is)h
Fo(adjac)-5 b(ent)32 b(to)37 b Fn(v)t Fr(,)31 b(and)f
Fn(v)k Fr(is)c Fo(adjac)-5 b(ent)32 b(fr)-5 b(om)37 b
Fn(u)p Fr(.)-116 4847 y(The)d(n)m(um)m(b)s(er)g(of)f(v)m(ertices)i
(adjacen)m(t)f(to)f Fn(v)38 b Fr(is)33 b(the)h Fo(in-de)-5
b(gr)g(e)g(e)39 b Fr(of)34 b Fn(v)t Fr(,)f(denoted)i
Fo(Inde)-5 b(g)n Fr(\()p Fn(v)t Fr(\),)34 b(and)f(the)h(n)m(um)m(b)s
(er)-116 4980 y(of)e(v)m(ertices)i(adjacen)m(t)f(from)e
Fn(v)36 b Fr(is)d(the)g Fo(out-de)-5 b(gr)g(e)g(e)39
b Fr(of)32 b Fn(v)t Fr(,)h(denoted)g Fo(Outde)-5 b(g)p
Fr(\()p Fn(v)t Fr(\).)30 5193 y(The)34 b(in-degrees)e(and)h
(out-degrees)g(are)g(connected)h(b)m(y)g(the)f(follo)m(wing)d
(equation:)138 5347 y Fk(X)128 5531 y Fj(v)r Fl(2)p Fj(V)285
5430 y Fo(Inde)-5 b(g)o Fr(\()p Fn(v)t Fr(\))27 b(=)780
5347 y Fk(X)769 5531 y Fj(v)r Fl(2)p Fj(V)927 5430 y
Fo(Outde)-5 b(g)p Fr(\()p Fn(v)t Fr(\))27 b(=)g Fn(e)2152
b Fr(\(2.1\))30 5724 y(T)-8 b(o)25 b(pro)s(cess)i(graphs,)g(w)m(e)f(ha)
m(v)m(e)h(to)e(select)g(a)g(represen)m(tation)h(for)f(them.)41
b(One)25 b(common)f(represen)m(tation)-116 5858 y(is)32
b(the)h Fo(adjac)-5 b(ency)34 b(matrix)p Fr(.)p eop
14 1 bop -116 -294 a Fr(14)-116 18 y Fp(De\014nition)p
Fr(.)66 b(An)35 b Fo(adjac)-5 b(ency)35 b(matrix)45 b
Fr(of)34 b(a)f(graph)h Fn(G)c Fr(=)g(\()p Fn(V)5 b(;)17
b(E)6 b Fr(\))34 b(is)f(an)h Fn(n)24 b Fm(\002)f Fn(n)34
b Fr(Bo)s(olean)f(matrix)f Fn(A)i Fr(suc)m(h)-116 152
y(that)e Fn(A)p Fr([)p Fn(i;)17 b(j)6 b Fr(])33 b(is)f
Fp(true)g Fr(i\013)g(\(if)f(and)i(only)f(if)7 b(\))31
b Fn(G)i Fr(has)g(an)f(edge)h(\()p Fn(v)2219 167 y Fj(i)2248
152 y Fn(;)17 b(v)2339 167 y Fj(j)2375 152 y Fr(\).)30
374 y(Chec)m(king)31 b(the)e(presence)j(of)d(an)g(edge)h(\()p
Fn(v)1546 389 y Fj(i)1574 374 y Fn(;)17 b(v)1665 389
y Fj(j)1702 374 y Fr(\))29 b(tak)m(es)h Fn(O)s Fr(\(1\))f(time)e(in)i
(an)g(adjacency)i(matrix.)41 b(En)m(umer-)-116 507 y(ating)c(the)j(v)m
(ertices)g(adjacen)m(t)f(to)g(or)f(adjacen)m(t)i(from)e(a)g(v)m(ertex)j
Fn(v)h Fr(tak)m(es)e(\002\()p Fn(n)p Fr(\))f(time)f(regardless)h(of)f
(the)-116 641 y(in-degree)d(or)g(out-degree)h(of)f Fn(v)t
Fr(.)53 b(The)36 b(main)e(disadv)-5 b(an)m(tage)35 b(of)h(the)g
(adjacency)g(matrix)f(is)g(that)g(it)g(tak)m(es)-116
775 y(\002\()p Fn(n)56 738 y Fi(2)95 775 y Fr(\))29 b(space)g(ev)m(en)h
(when)g(the)f(graph)f(is)g Fo(sp)-5 b(arse)p Fr(,)28
b(i.e.,)h(it)f(has)g(m)m(uc)m(h)h(few)m(er)h(than)f Fn(n)2966
738 y Fi(2)3034 775 y Fr(edges.)43 b(F)-8 b(or)27 b(instance,)-116
908 y(if)35 b(the)h(adjacency)h(matrix)d(resides)j(on)f(a)g(disk)g
(\014le,)g(simply)f(to)g(read)h(in)f(the)i(matrix)d(tak)m(es)j(\012\()p
Fn(n)3545 872 y Fi(2)3585 908 y Fr(\))f(time.)-116 1042
y(A)c(more)g(suitable)g(represen)m(tation)h(for)f(sparse)i(graphs)f(is)
f(the)h Fo(adjac)-5 b(ency)34 b(list)h(r)-5 b(epr)g(esentation)p
Fr(.)-116 1264 y Fp(De\014nition)p Fr(.)91 b(An)47 b
Fo(adjac)-5 b(ency)46 b(list)i(A)-5 b(djF)e(r)i(om)o
Fr(\()p Fn(v)t Fr(\))46 b(of)f(v)m(ertex)k Fn(v)h Fr(is)45
b(a)h(list)f(that)h(con)m(tains)h(the)g(v)m(ertices)-116
1397 y(adjacen)m(t)30 b(from)f Fn(v)t Fr(.)42 b(The)31
b(adjacency)g(list)e(represen)m(tation)i(of)e(a)h(graph)g(consists)g
(of)g(the)g(adjacency)h(lists)e(of)-116 1531 y(its)j(v)m(ertices.)30
1753 y(The)g(adjacency)g(list)d(represen)m(tation)i(tak)m(es)h
Fn(O)s Fr(\()p Fn(n)18 b Fr(+)g Fn(e)p Fr(\))31 b(space.)44
b(En)m(umerating)30 b(the)h(v)m(ertices)h(adjacen)m(t)-116
1886 y(from)24 b(a)h(v)m(ertex)j Fn(v)h Fr(tak)m(es)e
Fn(O)s Fr(\()p Fo(Outde)-5 b(g)o Fr(\()p Fn(v)t Fr(\)\))25
b(time,)h(and)f(en)m(umerating)g(all)f(edges)i(of)g(the)g(graph)f(tak)m
(es)i Fn(O)s Fr(\()p Fn(n)8 b Fr(+)g Fn(e)p Fr(\))-116
2020 y(time.)74 b(Chec)m(king)44 b(the)g(presence)h(of)e(an)g(edge)h
(\()p Fn(v)t(;)17 b(w)s Fr(\))42 b(tak)m(es)j Fn(O)s
Fr(\()p Fo(Outde)-5 b(g)o Fr(\()p Fn(v)t Fr(\)\))43 b(time.)74
b(En)m(umerating)42 b(the)-116 2153 y(v)m(ertices)37
b(adjacen)m(t)g(to)f(a)g(v)m(ertex)i Fn(v)i Fr(ma)m(y)c(tak)m(e)h
Fn(O)s Fr(\()p Fn(n)24 b Fr(+)g Fn(e)p Fr(\))37 b(time,)f(since)g(w)m
(e)h(m)m(ust)g(c)m(hec)m(k)h(the)f(presence)h(of)-116
2287 y Fn(v)k Fr(in)37 b(eac)m(h)j(adjacency)f(list.)60
b(If)38 b(the)h(v)m(ertices)g(adjacen)m(t)g(to)f(a)g(v)m(ertex)j
Fn(v)h Fr(are)c(often)g(needed,)k(w)m(e)d(can)g(use)-116
2421 y(another)31 b(list)f Fo(A)-5 b(djT)e(o)o Fr(\()p
Fn(v)t Fr(\))31 b(for)g(storing)f(them.)43 b(If)31 b(the)h(graph)f(is)g
(dense,)i(i.e.,)e(the)h(n)m(um)m(b)s(er)g(of)f(edges)h(is)f(close)-116
2554 y(to)41 b Fn(n)70 2518 y Fi(2)109 2554 y Fr(,)j(the)e(adjacency)h
(matrix)d(represen)m(tation)i(is)f(more)f(economical,)i(since)g(the)g
(constan)m(t)g(costs)g(for)-116 2688 y(storing)31 b(an)i(edge)g(are)g
(higher)f(in)g(an)g(adjacency)i(list)d(than)i(in)e(an)i(adjacency)h
(matrix.)-116 2910 y Fp(Example)28 b(2.1.)e Fr(In)g(Figure)32
b(2.1)o(,)27 b(w)m(e)g(presen)m(t)g(an)f(example)f(graph)g
Fn(G)j Fr(=)f(\()p Fn(V)5 b(;)17 b(E)6 b Fr(\).)42 b(The)26
b(v)m(ertices)h(are)f(sho)m(wn)-116 3043 y(as)g(circles)g(and)h(the)g
(edges)g(as)g(arro)m(ws)g(going)e(from)g(the)h(tail)f(of)h(the)g(edge)h
(to)f(the)h(head)g(of)f(the)h(edge.)42 b(Belo)m(w)-116
3177 y Fn(G)32 b Fr(w)m(e)i(presen)m(t)g(its)e(adjacency)i(matrix)d
(and)i(adjacency)g(list)f(represen)m(tations.)p 2895
3177 4 67 v 2899 3114 59 4 v 2899 3177 V 2957 3177 4
67 v 640 4396 a @beginspecial 0 @llx 0 @lly 428 @urx
178 @ury 2976 @rwi @setspecial
/$GraphOperDict 200 dict def
/$VertexDict 1000 dict def
/$EdgeDict 1000 dict def
/$DataDict 1000 dict def
/$GraphicsDict 1000 dict def
/$FontDict 200 dict def
$GraphOperDict begin
/ChainRad {2.3 VRad mul }bind def 
/Gensym {GensymCounter dup 1 add /GensymCounter exch store 10 string cvs dup length 1 add string dup <67>0 exch putinterval dup 1 4 3 roll putinterval cvn }bind def 
/Chain {mark 1 index /Chain ] DataTableStore aload length dup 1 eq {pop UnitChain }{1 sub {1 index 3 1 roll ChainLink }repeat pop }ifelse }bind def 
/PrintVertexLabel {16 dict begin /id /x /y 3 BindPars LabelType /Normal eq {VertexLabelName id x y PrintSubscriptedLabel }{LabelType /Simple eq {LabelFont setfont newpath 0 0 moveto id false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def id stringwidth pop /vx exch def /vy uy ly sub def x vx 0.5 mul sub y vy 0.5 mul sub moveto id show }{}ifelse }ifelse end }bind def 
/CountLine {10 dict begin /id1 /id2 2 BindPars id1 GetVertex dup VertexX /x1 exch def VertexY /y1 exch def id2 GetVertex dup VertexX /x2 exch def VertexY /y2 exch def /dx x2 x1 sub def /dy y2 y1 sub def /dl dx dup mul dy dup mul add sqrt def /nx PDist dy neg dl div mul def /ny PDist dx dl div mul def mark dx dy x1 nx add y1 ny add ] end }bind def 
/ProcessVertexAttributes {0 setlinejoin 0 setlinecap /Visible true def attr type /arraytype eq {attr {/item exch def item 0 get /Visible eq {/Visible item 1 get def }{<496c6c6567616c206974656d0a>}ifelse }forall }if Visible {0.0 setcolor }{1.0 setcolor }ifelse }bind def 
/PrintEdgeHead {3 dict begin /x /y /angle 3 BindPars x y translate angle rotate newpath 0 0 moveto VRad 1.0 div VRad 3.5 div 1 index 1 index neg lineto lineto closepath fill end }bind def 
/Name {30 string cvs dup length 1 add string dup 0 <76>putinterval dup 1 4 3 roll putinterval cvn }bind def 
/ProcessEdgeAttributes {0 setlinejoin 0 setlinecap id1 id2 eq {/StartAngle 0 def /EndAngle null def /OpenAngle 90 def /Deviation 3 def /EdgeType /leftedge def }{/StartAngle 20 def /EndAngle null def /Deviation 0.1 def /EdgeType /normal def }ifelse attr type /arraytype eq {attr {/item exch def item 0 get /setdash eq {item 1 get item 2 get setdash }{item 0 get /deviation eq {/Deviation item 1 get def }{item 0 get /edgetype eq {/EdgeType item 1 get def }{item 0 get /startangle eq {/StartAngle item 1 get def }{item 0 get /endangle eq {/EndAngle item 1 get def }{item 0 get /OpenAngle eq {/OpenAngle item 1 get def }{<496c6c6567616c206974656d0a>}ifelse }ifelse }ifelse }ifelse }ifelse }ifelse }forall }if EndAngle null eq {/EndAngle StartAngle def }if }bind def 
/PrintThreePointEdge {20 dict begin /clockwise /x1 /y1 /x2 /y2 /x3 /y3 7 BindPars /nim y1 x2 x3 sub mul x1 y3 y2 sub mul add y2 x3 mul add x2 y3 mul sub 2 mul def nim 0 ne {/xos x1 dup mul y1 dup mul add y2 y3 mul add y3 y2 sub mul x2 dup mul y1 y3 sub mul add x3 dup mul y2 y1 sub mul add y1 y2 dup mul y3 dup mul sub mul add def /yos x1 dup mul y1 dup mul add x2 x3 mul add x2 x3 sub mul y2 dup mul x3 x1 sub mul add y3 dup mul x1 x2 sub mul add x1 x3 dup mul x2 dup mul sub mul add def /x xos nim div def /y yos nim div def /r x x1 sub dup mul y y1 sub dup mul add sqrt def /a1 y1 y sub x1 x sub atan def /a3 y3 y sub x3 x sub atan def newpath x y r a1 a3 clockwise {arc }{arcn }ifelse stroke /aux VRad r dup mul 4 mul VRad dup mul sub sqrt atan def x3 y3 a3 90 aux add clockwise {neg }if add PrintEdgeHead }{newpath x1 y1 moveto x3 y3 lineto stroke x3 y3 180 PrintEdgeHead }ifelse end }bind def 
/TableStore {Gensym exch put }bind def 
/ProjectPoint {10 dict begin /lin /x /y 3 BindPars lin aload pop /dx /dy /x0 /y0 4 BindPars /dl dx dup mul dy dup mul add def dy dup mul x0 mul dx dy mul y0 mul sub dx dup mul x mul add dx dy mul y mul add dl div dx dup mul y0 mul dx dy mul x0 mul sub dy dup mul y mul add dx dy mul x mul add dl div end }bind def 
/GensymCounter 12 def 
/UnitChain {gsave mark 4 ] 0 setdash 2 setlinewidth 1 setlinecap newpath GetVertex dup VertexX exch VertexY translate 0 0 ChainRad 0 360 arc stroke grestore }bind def 
/VertexData {10 dict begin /id /item 2 BindPars id GetVertex dup VertexX /x exch def VertexY /y exch def item {dup DataBox pop pop y add exch x add exch moveto dup DataItemFont setfont DataItemString show }forall mark id item /VertexData ] DataTableStore end }bind def 
/VertexLabelName <76>def 
/ChainLink {20 dict begin /id1 /id2 2 BindPars gsave mark 4 ] 0 setdash 2 setlinewidth 1 setlinecap /vertex1 id1 GetVertex def /vertex2 id2 GetVertex def /x1 vertex1 VertexX def /y1 vertex1 VertexY def /x2 vertex2 VertexX def /y2 vertex2 VertexY def /dist x2 x1 sub dup mul y2 y1 sub dup mul add sqrt def x1 y1 translate y2 y1 sub x2 x1 sub atan rotate newpath 0 0 ChainRad sub moveto dist 0 ChainRad -90 90 arc 0 0 ChainRad 90 270 arc closepath stroke grestore end }bind def 
/DataTableStore {$DataDict exch TableStore }bind def 
/ClosedPolyLine {20 dict begin /ids exch def /idcount ids length def /PDist VRad 2.5 mul def idcount 1 eq {newpath ids 0 get GetVertex dup VertexX exch VertexY PDist 0 360 arc stroke }{newpath 0 1 idcount 1 sub {/i exch def /id1 ids i 1 sub idcount add idcount mod get def /id2 ids i get def /id3 ids i 1 add idcount mod get def /line1 id1 id2 CountLine def /line2 id2 id3 CountLine def /p0 line1 line2 LineIntersection def p0 null eq {id2 GetVertex dup VertexX exch VertexY PDist line1 1 get line1 0 get atan 90 add dup 180 sub arcn }{i 0 eq {line1 id1 GetVertex dup VertexX exch VertexY ProjectPoint /oy1 exch def /ox1 exch def line1 id2 GetVertex dup VertexX exch VertexY ProjectPoint /oy2 exch def /ox2 exch def ox1 ox2 add 2 div oy1 oy2 add 2 div moveto }if p0 0 get p0 1 get line2 id2 GetVertex dup VertexX exch VertexY ProjectPoint /oy1 exch def /ox1 exch def line2 id3 GetVertex dup VertexX exch VertexY ProjectPoint /oy2 exch def /ox2 exch def ox1 ox2 add 2 div oy1 oy2 add 2 div PDist arct }ifelse }for closepath stroke }ifelse end }bind def 
/PrintSubscriptedLabel {10 dict begin /ch /subscr /x /y 4 BindPars /cx 0.85 def /cy 0.85 def LabelFont setfont newpath 0 0 moveto ch false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def /vx ux lx sub def /vy uy ly sub def ScriptFont setfont newpath 0 0 moveto subscr false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def /ix ux lx sub def /iy uy ly sub def /wx vx cx mul ix add def /wy vy cy mul iy add def LabelFont setfont x wx 0.5 mul sub y wy 0.5 mul vy sub add moveto ch show ScriptFont setfont x cx vx mul wx 0.5 mul sub add y wy 0.5 mul sub moveto subscr show end }bind def 
/PrintEdge {40 dict begin /id1 /id2 /attr 3 BindPars gsave /vertex id1 GetVertex def /x1 vertex VertexX def /y1 vertex VertexY def /vertex id2 GetVertex def /x2 vertex VertexX def /y2 vertex VertexY def ProcessEdgeAttributes id1 id2 ne {/a y2 y1 sub x2 x1 sub atan def /r y2 y1 sub dup mul x2 x1 sub dup mul add sqrt def x1 y1 translate a rotate EdgeType /normal eq {true VRad 0 VRad 0 r VRad sub 0 PrintThreePointEdge }{/sx1 VRad StartAngle cos mul def /sy1 VRad StartAngle sin mul def /sx3 r VRad EndAngle cos mul sub def /sy3 VRad EndAngle sin mul def /sxo sx1 sx3 add 2 div def /syo sy1 sy3 add 2 div def /sr sx3 sx1 sub dup mul sy3 sy1 sub dup mul add sqrt def /sh sr Deviation mul def /alpha sy3 sy1 sub sx3 sx1 sub atan def /sx2 sxo alpha sin sh mul sub def /sy2 syo alpha cos sh mul add def EdgeType /leftedge eq {false sx1 sy1 sx2 sy2 sx3 sy3 }{true sx1 sy1 neg sx2 sy2 neg sx3 sy3 neg }ifelse PrintThreePointEdge }ifelse }{x1 y1 translate StartAngle rotate /ha OpenAngle 2 div def /sx1 VRad ha cos mul def /sy1 VRad ha sin mul def /sx2 sy1 dup add Deviation mul def EdgeType /leftedge eq {false sx1 sy1 sx2 0 sx1 sy1 neg }{true sx1 sy1 neg sx2 0 sx1 sy1 }ifelse PrintThreePointEdge }ifelse grestore end }bind def 
/Edge {2 dict begin /id1 /id2 /attr 3 BindPars /e mark id1 id2 attr ] def $VertexDict id1 Name mark $VertexDict id1 Name get aload pop e ] put $EdgeDict e TableStore id1 id2 attr PrintEdge end }bind def 
/PrintVertex {10 dict begin /id /attr 2 BindPars /vertex id GetVertex def gsave ProcessVertexAttributes Visible {newpath vertex VertexX vertex VertexY VRad 0 360 arc stroke id vertex VertexX vertex VertexY PrintVertexLabel }if grestore end }bind def 
/Vertex {3 dict begin /id /x /y /attr 4 BindPars $VertexDict id Name mark id x y attr ] put id attr PrintVertex end }bind def 
/Graphics {dup $GraphicsDict exch TableStore 1 get exec }bind def 
/LineIntersection {20 dict begin line1 line2 2 BindPars line1 aload pop /ax /ay /rx /ry 4 BindPars line2 aload pop /bx /by /sx /sy 4 BindPars /nim ay bx mul ax by mul sub def nim abs 0.1 lt {null }{/f by rx sx sub mul bx ry sy sub mul sub nim div def /p0x rx ax f mul add def /p0y ry ay f mul add def mark p0x p0y ] }ifelse end }bind def 
/OrigoX -86.0 def 
/Fonts [[/ScriptFont /Times-Roman 12 ][/DataFont /Times-Italic 16 ][/LabelFont /Times-Italic 20 ]]bind def 
/GetVertex {$VertexDict exch Name get }bind def 
/loc 5 def 
/DataItemFont {0 get load }bind def 
/FD {4 dict begin /FDname /FDfont /FDsize 3 BindPars $GraphOperDict FDname FDfont findfont FDsize scalefont put $FontDict FDname mark FDfont FDsize ] put end }bind def 
/DataItemYskip {2 get }bind def 
/DataBox {16 dict begin /item exch def /fnt item DataItemFont def /xskip item DataItemXskip def /yskip item DataItemYskip def /str item DataItemString def fnt setfont newpath 0 0 moveto str false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def str stringwidth pop /vx exch def /vy uy ly sub def 0 vx 0.5 mul sub vx 0.5 mul VRad 2 mul add xskip mul add /lx exch def 0 vy 0.5 mul sub vy 0.5 mul VRad 2 mul add yskip mul add /ly exch def lx ly lx vx add ly vy add end }bind def 
/VRad 13 def 
/VertexY {2 get }bind def 
/OrigoY -111.0 def 
/BindPars {/loc exch def loc {loc index def }repeat loc {pop }repeat }bind def 
/LabelType /Normal def 
/DataItemXskip {1 get }bind def 
/InitGraph {/OrigoX /OrigoY /VRad /Fonts /LabelType 5 BindPars OrigoX OrigoY translate Fonts {aload pop FD }forall }bind def 
/DataItemString {3 get }bind def 
/VertexX {1 get }bind def 
end
/$GraphsBegin {$GraphOperDict begin /$GraphsEnteredState save def }bind def 
/$GraphsEnd {$GraphsEnteredState restore end }bind def 
$GraphsBegin
-86.0 -111.0 13 [[/ScriptFont /Times-Roman 12 ][/DataFont /Times-Italic 16 ][/LabelFont /Times-Italic 20 ]] /Normal  InitGraph
(5) 400 275 null Vertex
(7) 500 275 null Vertex
(2) 200 275 null Vertex
(4) 300 200 null Vertex
(6) 400 125 null Vertex
(8) 500 125 null Vertex
(1) 100 200 null Vertex
(3) 200 125 null Vertex
(6) (8) [[/deviation 0.05 ][/edgetype /rightedge ]] Edge
(8) (6) [[/deviation 0.05 ][/edgetype /rightedge ]] Edge
(1) (2) [] Edge
(3) (1) [] Edge
(3) (4) [] Edge
(4) (6) [] Edge
(6) (5) [] Edge
(7) (5) [[/deviation 0.05 ][/edgetype /leftedge ]] Edge
(2) (3) [] Edge
(2) (4) [] Edge
(4) (5) [] Edge
(5) (7) [[/deviation 0.05 ][/edgetype /leftedge ]] Edge
$GraphsEnd
 @endspecial 704 4671 a Fk(0)704 4817 y(B)704 4867 y(B)704
4916 y(B)704 4966 y(B)704 5016 y(B)704 5066 y(B)704 5116
y(B)704 5166 y(B)704 5215 y(B)704 5265 y(B)704 5315 y(B)704
5365 y(B)704 5415 y(B)704 5464 y(B)704 5518 y(@)792 4610
y Fh(1)91 b(2)h(3)f(4)h(5)f(6)g(7)h(8)642 4752 y(1)105
b(0)91 b(1)h(0)f(0)h(0)f(0)g(0)h(0)642 4877 y(2)105 b(0)91
b(0)h(1)f(1)h(0)f(0)g(0)h(0)642 5003 y(3)105 b(1)91 b(0)h(0)f(1)h(0)f
(0)g(0)h(0)642 5128 y(4)105 b(0)91 b(0)h(0)f(0)h(1)f(1)g(0)h(0)642
5253 y(5)105 b(0)91 b(0)h(0)f(0)h(0)f(0)g(1)h(0)642 5379
y(6)105 b(0)91 b(0)h(0)f(0)h(1)f(0)g(0)h(1)642 5504 y(7)105
b(0)91 b(0)h(0)f(0)h(1)f(0)g(0)h(0)642 5629 y(8)105 b(0)91
b(0)h(0)f(0)h(0)f(1)g(0)h(0)1807 4671 y Fk(1)1807 4817
y(C)1807 4867 y(C)1807 4916 y(C)1807 4966 y(C)1807 5016
y(C)1807 5066 y(C)1807 5116 y(C)1807 5166 y(C)1807 5215
y(C)1807 5265 y(C)1807 5315 y(C)1807 5365 y(C)1807 5415
y(C)1807 5464 y(C)1807 5518 y(A)2224 4752 y Fg(A)-5 b(djF)e(r)i(om)r
Fh(\()p Ff(v)2647 4766 y Fi(1)2687 4752 y Fh(\))84 b(=)e
Fe(f)p Ff(v)3048 4766 y Fi(2)3088 4752 y Fe(g)2224 4877
y Fg(A)-5 b(djF)e(r)i(om)r Fh(\()p Ff(v)2647 4891 y Fi(2)2687
4877 y Fh(\))84 b(=)e Fe(f)p Ff(v)3048 4891 y Fi(3)3088
4877 y Ff(;)15 b(v)3172 4891 y Fi(4)3212 4877 y Fe(g)2224
5003 y Fg(A)-5 b(djF)e(r)i(om)r Fh(\()p Ff(v)2647 5017
y Fi(3)2687 5003 y Fh(\))84 b(=)e Fe(f)p Ff(v)3048 5017
y Fi(1)3088 5003 y Ff(;)15 b(v)3172 5017 y Fi(4)3212
5003 y Fe(g)2224 5128 y Fg(A)-5 b(djF)e(r)i(om)r Fh(\()p
Ff(v)2647 5142 y Fi(4)2687 5128 y Fh(\))84 b(=)e Fe(f)p
Ff(v)3048 5142 y Fi(5)3088 5128 y Ff(;)15 b(v)3172 5142
y Fi(6)3212 5128 y Fe(g)2224 5253 y Fg(A)-5 b(djF)e(r)i(om)r
Fh(\()p Ff(v)2647 5267 y Fi(5)2687 5253 y Fh(\))84 b(=)e
Fe(f)p Ff(v)3048 5267 y Fi(7)3088 5253 y Fe(g)2224 5379
y Fg(A)-5 b(djF)e(r)i(om)r Fh(\()p Ff(v)2647 5393 y Fi(6)2687
5379 y Fh(\))84 b(=)e Fe(f)p Ff(v)3048 5393 y Fi(5)3088
5379 y Ff(;)15 b(v)3172 5393 y Fi(8)3212 5379 y Fe(g)2224
5504 y Fg(A)-5 b(djF)e(r)i(om)r Fh(\()p Ff(v)2647 5518
y Fi(7)2687 5504 y Fh(\))84 b(=)e Fe(f)p Ff(v)3048 5518
y Fi(5)3088 5504 y Fe(g)2224 5629 y Fg(A)-5 b(djF)e(r)i(om)r
Fh(\()p Ff(v)2647 5643 y Fi(8)2687 5629 y Fh(\))84 b(=)e
Fe(f)p Ff(v)3048 5643 y Fi(6)3088 5629 y Fe(g)426 5833
y Fd(Figure)38 b(2.1)p Fr(:)43 b(An)33 b(example)f(graph)g
Fn(G)c Fr(=)g(\()p Fn(V)5 b(;)17 b(E)6 b Fr(\))32 b(and)h(its)f
(represen)m(tations.)p eop
15 2 bop 3778 -294 a Fr(15)-116 18 y Fp(De\014nition)p
Fr(.)70 b(A)35 b Fo(p)-5 b(ath)37 b(fr)-5 b(om)38 b(vertex)f
Fn(v)1361 33 y Fi(0)1438 18 y Fo(to)h(vertex)f Fn(v)1895
33 y Fj(k)1973 18 y Fr(in)e Fn(G)p Fr(,)h(denoted)h Fn(v)2649
33 y Fi(0)2721 -35 y Fl(\003)2689 18 y Fm(!)o Fn(v)2835
33 y Fj(k)2878 18 y Fr(,)f(is)f(a)g(sequence)k(of)c(edges)-116
152 y(of)30 b(the)g(form)f(\()p Fn(v)471 167 y Fi(0)511
152 y Fn(;)17 b(v)602 167 y Fi(1)641 152 y Fr(\))p Fn(;)g
Fr(\()p Fn(v)808 167 y Fi(1)847 152 y Fn(;)g(v)938 167
y Fi(2)978 152 y Fr(\))p Fn(;)g(:)g(:)g(:)e(;)i Fr(\()p
Fn(v)1319 167 y Fj(k)r Fl(\000)p Fi(1)1452 152 y Fn(;)g(v)1543
167 y Fj(k)1585 152 y Fr(\),)31 b(where)h(eac)m(h)f(edge)g(is)e(in)h
Fn(E)6 b Fr(.)43 b(The)31 b Fo(length)h(of)h(a)f(p)-5
b(ath)38 b Fr(is)29 b(the)-116 286 y(n)m(um)m(b)s(er)34
b(of)g(edges)i(in)d(it.)48 b(A)34 b(path)h(from)e Fn(v)38
b Fr(to)c Fn(u)f Fr(is)h Fo(non-nul)5 b(l)p Fr(,)34 b(denoted)h
Fn(v)2697 232 y Fi(+)2675 286 y Fm(!)p Fn(u)p Fr(,)f(if)f(its)h(length)
g(is)f(p)s(ositiv)m(e.)-116 419 y(A)38 b(path)h(is)e
Fo(simple)45 b Fr(if)37 b(all)g(edges)i(and)f(v)m(ertices)i(on)e(the)h
(path,)h(except)g(p)s(ossibly)e(the)h(\014rst)f(and)h(the)g(last)-116
553 y(v)m(ertex,)30 b(are)e(distinct.)42 b(A)27 b Fo(cycle)35
b Fr(is)28 b(a)f(non-n)m(ull)g(simple)f(path)i(that)g(b)s(egins)f(and)h
(ends)h(at)f(the)g(same)g(v)m(ertex.)-116 686 y(A)34
b(graph)f(that)h(con)m(tains)g(no)g(cycles)h(is)e Fo(acyclic)p
Fr(.)47 b(If)34 b(w)m(e)h(do)e(not)h(explicitly)e(sa)m(y)j(that)f(a)f
(graph)h(is)f(acyclic,)-116 820 y(w)m(e)g(assume)g(that)g(it)e(ma)m(y)i
(con)m(tain)f(cycles,)i(i.e.,)e(it)f(ma)m(y)i(b)s(e)g
Fo(cyclic)p Fr(.)-116 1054 y Fp(Example)51 b(2.2.)46
b Fr(In)g(Figure)32 b(2.1)o(,)49 b(\(\()p Fn(v)1347 1069
y Fi(1)1387 1054 y Fn(;)17 b(v)1478 1069 y Fi(2)1517
1054 y Fr(\))p Fn(;)g Fr(\()p Fn(v)1684 1069 y Fi(2)1723
1054 y Fn(;)g(v)1814 1069 y Fi(3)1854 1054 y Fr(\))p
Fn(;)g Fr(\()p Fn(v)2021 1069 y Fi(3)2060 1054 y Fn(;)g(v)2151
1069 y Fi(4)2190 1054 y Fr(\)\))45 b(is)h(a)f(simple)f(path)i(and)f
(path)h(\(\()p Fn(v)3641 1069 y Fi(1)3681 1054 y Fn(;)17
b(v)3772 1069 y Fi(2)3811 1054 y Fr(\))p Fn(;)-116 1188
y Fr(\()p Fn(v)-31 1203 y Fi(2)8 1188 y Fn(;)g(v)99 1203
y Fi(3)139 1188 y Fr(\))p Fn(;)g Fr(\()p Fn(v)306 1203
y Fi(3)345 1188 y Fn(;)g(v)436 1203 y Fi(1)475 1188 y
Fr(\)\))38 b(is)f(a)h(cycle.)60 b(P)m(ath)39 b(\(\()p
Fn(v)1440 1203 y Fi(4)1479 1188 y Fn(;)17 b(v)1570 1203
y Fi(6)1609 1188 y Fr(\))p Fn(;)g Fr(\()p Fn(v)1776 1203
y Fi(6)1816 1188 y Fn(;)g(v)1907 1203 y Fi(8)1946 1188
y Fr(\))p Fn(;)g Fr(\()p Fn(v)2113 1203 y Fi(8)2152 1188
y Fn(;)g(v)2243 1203 y Fi(6)2282 1188 y Fr(\))p Fn(;)g
Fr(\()p Fn(v)2449 1203 y Fi(6)2489 1188 y Fn(;)g(v)2580
1203 y Fi(5)2619 1188 y Fr(\)\))38 b(is)f(not)h(simple.)58
b(Graph)37 b Fn(G)h Fr(of)-116 1321 y(Figure)31 b(2.1)h(is)h(cyclic.)p
753 1321 4 67 v 757 1258 59 4 v 757 1321 V 814 1321 4
67 v -116 1555 a Fp(De\014nition)p Fr(.)54 b(The)29 b
Fo(tr)-5 b(ansitive)30 b(closur)-5 b(e)30 b(of)g(gr)-5
b(aph)30 b Fn(G)d Fr(=)h(\()p Fn(V)5 b(;)17 b(E)6 b Fr(\))27
b(is)g(a)h(graph)f Fn(G)2780 1519 y Fi(+)2867 1555 y
Fr(=)h(\()p Fn(V)5 b(;)17 b(E)3193 1519 y Fi(+)3252 1555
y Fr(\))27 b(suc)m(h)i(that)f Fn(E)3817 1519 y Fi(+)-116
1689 y Fr(con)m(tains)k(an)g(edge)h(\()p Fn(v)t(;)17
b(w)s Fr(\))30 b(i\013)h Fn(G)h Fr(con)m(tains)g(a)g(non-n)m(ull)f
(path)h Fn(v)2267 1636 y Fi(+)2245 1689 y Fm(!)o Fn(w)s
Fr(.)43 b(The)33 b(size)f(of)g(the)g(transitiv)m(e)g(closure)-116
1823 y(is)h(denoted)h(b)m(y)h Fn(e)534 1787 y Fi(+)593
1823 y Fr(.)46 b(The)35 b Fo(suc)-5 b(c)g(essor)35 b(set)43
b Fr(of)33 b(a)g(v)m(ertex)j Fn(v)h Fr(is)c(the)h(set)g
Fo(Suc)-5 b(c)p Fr(\()p Fn(v)t Fr(\))29 b(=)g Fm(f)p
Fn(w)j Fm(j)d Fr(\()p Fn(v)t(;)17 b(w)s Fr(\))28 b Fm(2)h
Fn(E)3554 1787 y Fi(+)3614 1823 y Fm(g)p Fr(,)k(i.e.,)-116
1956 y(the)k(set)g(of)f(all)e(v)m(ertices)j(that)g(can)f(b)s(e)h(reac)m
(hed)h(from)d(v)m(ertex)j Fn(v)i Fr(via)c(non-n)m(ull)e(paths.)56
b(The)37 b Fo(pr)-5 b(e)g(de)g(c)g(essor)-116 2090 y(set)51
b Fr(of)41 b(a)h(v)m(ertex)h Fn(v)j Fr(is)41 b(the)h(set)h
Fo(Pr)-5 b(e)g(d)p Fr(\()p Fn(v)t Fr(\))43 b(=)g Fm(f)p
Fn(u)f Fm(j)h Fr(\()p Fn(u;)17 b(v)t Fr(\))42 b Fm(2)i
Fn(E)2263 2054 y Fi(+)2322 2090 y Fm(g)p Fr(,)g(i.e.,)g(the)e(set)h(of)
e(all)f(v)m(ertices)j(that)e Fn(v)-116 2224 y Fr(is)36
b(reac)m(hable)h(from)f(via)g(non-n)m(ull)f(paths.)57
b(The)38 b(v)m(ertices)g(adjacen)m(t)f(from)f(v)m(ertex)i
Fn(v)j Fr(are)c(the)g Fo(imme)-5 b(diate)-116 2357 y(suc)g(c)g(essors)
34 b(of)g Fn(v)j Fr(and)32 b(the)h(v)m(ertices)h(adjacen)m(t)f(to)g
Fn(v)j Fr(are)c(the)h Fo(imme)-5 b(diate)34 b(pr)-5 b(e)g(de)g(c)g
(essors)34 b(of)g Fn(v)t Fr(.)-116 2696 y Fp(Example)k(2.3.)d
Fr(The)g(transitiv)m(e)f(closure)g(of)g(graph)g Fn(G)g
Fr(of)g(Figure)d(2.1)j(is)g(presen)m(ted)i(in)e(Figure)d(2.2.)48
b(As)-116 2830 y(w)m(e)32 b(see,)g(the)g(successor)h(set)f(of)e(v)m
(ertices)j Fn(v)1452 2845 y Fi(1)1491 2830 y Fr(,)e Fn(v)1596
2845 y Fi(2)1636 2830 y Fr(,)g(and)h Fn(v)1930 2845 y
Fi(3)2000 2830 y Fr(is)f Fn(V)21 b Fr(;)32 b(the)f(successor)i(set)f
(of)f(v)m(ertices)h Fn(v)3476 2845 y Fi(4)3515 2830 y
Fr(,)g Fn(v)3621 2845 y Fi(6)3660 2830 y Fr(,)g(and)-116
2963 y Fn(v)-69 2978 y Fi(8)9 2963 y Fr(is)38 b Fm(f)p
Fn(v)210 2978 y Fi(5)250 2963 y Fn(;)17 b(v)341 2978
y Fi(6)380 2963 y Fn(;)g(v)471 2978 y Fi(7)510 2963 y
Fn(;)g(v)601 2978 y Fi(8)641 2963 y Fm(g)p Fr(;)42 b(and)d(the)g
(successor)i(set)f(of)e Fn(v)1878 2978 y Fi(5)1956 2963
y Fr(and)h Fn(v)2199 2978 y Fi(7)2278 2963 y Fr(is)f
Fm(f)p Fn(v)2479 2978 y Fi(5)2518 2963 y Fn(;)17 b(v)2609
2978 y Fi(7)2649 2963 y Fm(g)p Fr(.)62 b(Similarly)-8
b(,)36 b(sev)m(eral)k(v)m(ertices)-116 3097 y(ha)m(v)m(e)34
b(a)e(common)f(predecessor)k(set.)p 1286 3097 V 1290
3034 59 4 v 1290 3097 V 1348 3097 4 67 v -116 3331 a
Fp(De\014nition)p Fr(.)59 b(The)31 b Fo(r)-5 b(e\015exive)32
b(tr)-5 b(ansitive)33 b(closur)-5 b(e)32 b(of)h(gr)-5
b(aph)32 b Fn(G)c Fr(=)f(\()p Fn(V)5 b(;)17 b(E)6 b Fr(\))30
b(is)g(a)g(graph)g Fn(G)3188 3295 y Fl(\003)3255 3331
y Fr(=)e(\()p Fn(V)5 b(;)17 b(E)3581 3295 y Fl(\003)3620
3331 y Fr(\))30 b(suc)m(h)-116 3464 y(that)39 b Fn(E)180
3428 y Fl(\003)259 3464 y Fr(con)m(tains)g(an)g(edge)h(\()p
Fn(v)t(;)17 b(w)s Fr(\))38 b(i\013)h Fn(G)g Fr(con)m(tains)h(a)f(\(p)s
(ossibly)f(n)m(ull\))h(path)g Fn(v)2993 3411 y Fl(\003)2961
3464 y Fm(!)o Fn(w)s Fr(.)64 b(The)40 b(size)g(of)e(the)-116
3598 y(re\015exiv)m(e)c(transitiv)m(e)e(closure)h(is)f(denoted)h(b)m(y)
h Fn(e)1673 3562 y Fl(\003)1712 3598 y Fr(.)500 5647
y @beginspecial 0 @llx 0 @lly 476 @urx 320 @ury 3310
@rwi @setspecial
/$GraphOperDict 200 dict def
/$VertexDict 1000 dict def
/$EdgeDict 1000 dict def
/$DataDict 1000 dict def
/$GraphicsDict 1000 dict def
/$FontDict 200 dict def
$GraphOperDict begin
/ChainRad {2.3 VRad mul }bind def 
/Gensym {GensymCounter dup 1 add /GensymCounter exch store 10 string cvs dup length 1 add string dup <67>0 exch putinterval dup 1 4 3 roll putinterval cvn }bind def 
/Chain {mark 1 index /Chain ] DataTableStore aload length dup 1 eq {pop UnitChain }{1 sub {1 index 3 1 roll ChainLink }repeat pop }ifelse }bind def 
/PrintVertexLabel {16 dict begin /id /x /y 3 BindPars LabelType /Normal eq {VertexLabelName id x y PrintSubscriptedLabel }{LabelType /Simple eq {LabelFont setfont newpath 0 0 moveto id false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def id stringwidth pop /vx exch def /vy uy ly sub def x vx 0.5 mul sub y vy 0.5 mul sub moveto id show }{}ifelse }ifelse end }bind def 
/id1 <38>def 
/CountLine {10 dict begin /id1 /id2 2 BindPars id1 GetVertex dup VertexX /x1 exch def VertexY /y1 exch def id2 GetVertex dup VertexX /x2 exch def VertexY /y2 exch def /dx x2 x1 sub def /dy y2 y1 sub def /dl dx dup mul dy dup mul add sqrt def /nx PDist dy neg dl div mul def /ny PDist dx dl div mul def mark dx dy x1 nx add y1 ny add ] end }bind def 
/ProcessVertexAttributes {0 setlinejoin 0 setlinecap /Visible true def attr type /arraytype eq {attr {/item exch def item 0 get /Visible eq {/Visible item 1 get def }{<496c6c6567616c206974656d0a>}ifelse }forall }if Visible {0.0 setcolor }{1.0 setcolor }ifelse }bind def 
/PrintEdgeHead {3 dict begin /x /y /angle 3 BindPars x y translate angle rotate newpath 0 0 moveto VRad 1.0 div VRad 3.5 div 1 index 1 index neg lineto lineto closepath fill end }bind def 
/Name {30 string cvs dup length 1 add string dup 0 <76>putinterval dup 1 4 3 roll putinterval cvn }bind def 
/ProcessEdgeAttributes {0 setlinejoin 0 setlinecap id1 id2 eq {/StartAngle 0 def /EndAngle null def /OpenAngle 90 def /Deviation 3 def /EdgeType /leftedge def }{/StartAngle 20 def /EndAngle null def /Deviation 0.1 def /EdgeType /normal def }ifelse attr type /arraytype eq {attr {/item exch def item 0 get /setdash eq {item 1 get item 2 get setdash }{item 0 get /deviation eq {/Deviation item 1 get def }{item 0 get /edgetype eq {/EdgeType item 1 get def }{item 0 get /startangle eq {/StartAngle item 1 get def }{item 0 get /endangle eq {/EndAngle item 1 get def }{item 0 get /OpenAngle eq {/OpenAngle item 1 get def }{<496c6c6567616c206974656d0a>}ifelse }ifelse }ifelse }ifelse }ifelse }ifelse }forall }if EndAngle null eq {/EndAngle StartAngle def }if }bind def 
/PrintThreePointEdge {20 dict begin /clockwise /x1 /y1 /x2 /y2 /x3 /y3 7 BindPars /nim y1 x2 x3 sub mul x1 y3 y2 sub mul add y2 x3 mul add x2 y3 mul sub 2 mul def nim 0 ne {/xos x1 dup mul y1 dup mul add y2 y3 mul add y3 y2 sub mul x2 dup mul y1 y3 sub mul add x3 dup mul y2 y1 sub mul add y1 y2 dup mul y3 dup mul sub mul add def /yos x1 dup mul y1 dup mul add x2 x3 mul add x2 x3 sub mul y2 dup mul x3 x1 sub mul add y3 dup mul x1 x2 sub mul add x1 x3 dup mul x2 dup mul sub mul add def /x xos nim div def /y yos nim div def /r x x1 sub dup mul y y1 sub dup mul add sqrt def /a1 y1 y sub x1 x sub atan def /a3 y3 y sub x3 x sub atan def newpath x y r a1 a3 clockwise {arc }{arcn }ifelse stroke /aux VRad r dup mul 4 mul VRad dup mul sub sqrt atan def x3 y3 a3 90 aux add clockwise {neg }if add PrintEdgeHead }{newpath x1 y1 moveto x3 y3 lineto stroke x3 y3 180 PrintEdgeHead }ifelse end }bind def 
/TableStore {Gensym exch put }bind def 
/ProjectPoint {10 dict begin /lin /x /y 3 BindPars lin aload pop /dx /dy /x0 /y0 4 BindPars /dl dx dup mul dy dup mul add def dy dup mul x0 mul dx dy mul y0 mul sub dx dup mul x mul add dx dy mul y mul add dl div dx dup mul y0 mul dx dy mul x0 mul sub dy dup mul y mul add dx dy mul x mul add dl div end }bind def 
/GensymCounter 41 def 
/UnitChain {gsave mark 4 ] 0 setdash 2 setlinewidth 1 setlinecap newpath GetVertex dup VertexX exch VertexY translate 0 0 ChainRad 0 360 arc stroke grestore }bind def 
/VertexData {10 dict begin /id /item 2 BindPars id GetVertex dup VertexX /x exch def VertexY /y exch def item {dup DataBox pop pop y add exch x add exch moveto dup DataItemFont setfont DataItemString show }forall mark id item /VertexData ] DataTableStore end }bind def 
/VertexLabelName <76>def 
/ChainLink {20 dict begin /id1 /id2 2 BindPars gsave mark 4 ] 0 setdash 2 setlinewidth 1 setlinecap /vertex1 id1 GetVertex def /vertex2 id2 GetVertex def /x1 vertex1 VertexX def /y1 vertex1 VertexY def /x2 vertex2 VertexX def /y2 vertex2 VertexY def /dist x2 x1 sub dup mul y2 y1 sub dup mul add sqrt def x1 y1 translate y2 y1 sub x2 x1 sub atan rotate newpath 0 0 ChainRad sub moveto dist 0 ChainRad -90 90 arc 0 0 ChainRad 90 270 arc closepath stroke grestore end }bind def 
/DataTableStore {$DataDict exch TableStore }bind def 
/ClosedPolyLine {20 dict begin /ids exch def /idcount ids length def /PDist VRad 2.5 mul def idcount 1 eq {newpath ids 0 get GetVertex dup VertexX exch VertexY PDist 0 360 arc stroke }{newpath 0 1 idcount 1 sub {/i exch def /id1 ids i 1 sub idcount add idcount mod get def /id2 ids i get def /id3 ids i 1 add idcount mod get def /line1 id1 id2 CountLine def /line2 id2 id3 CountLine def /p0 line1 line2 LineIntersection def p0 null eq {id2 GetVertex dup VertexX exch VertexY PDist line1 1 get line1 0 get atan 90 add dup 180 sub arcn }{i 0 eq {line1 id1 GetVertex dup VertexX exch VertexY ProjectPoint /oy1 exch def /ox1 exch def line1 id2 GetVertex dup VertexX exch VertexY ProjectPoint /oy2 exch def /ox2 exch def ox1 ox2 add 2 div oy1 oy2 add 2 div moveto }if p0 0 get p0 1 get line2 id2 GetVertex dup VertexX exch VertexY ProjectPoint /oy1 exch def /ox1 exch def line2 id3 GetVertex dup VertexX exch VertexY ProjectPoint /oy2 exch def /ox2 exch def ox1 ox2 add 2 div oy1 oy2 add 2 div PDist arct }ifelse }for closepath stroke }ifelse end }bind def 
/PrintSubscriptedLabel {10 dict begin /ch /subscr /x /y 4 BindPars /cx 0.85 def /cy 0.85 def LabelFont setfont newpath 0 0 moveto ch false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def /vx ux lx sub def /vy uy ly sub def ScriptFont setfont newpath 0 0 moveto subscr false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def /ix ux lx sub def /iy uy ly sub def /wx vx cx mul ix add def /wy vy cy mul iy add def LabelFont setfont x wx 0.5 mul sub y wy 0.5 mul vy sub add moveto ch show ScriptFont setfont x cx vx mul wx 0.5 mul sub add y wy 0.5 mul sub moveto subscr show end }bind def 
/id2 <36>def 
/PrintEdge {40 dict begin /id1 /id2 /attr 3 BindPars gsave /vertex id1 GetVertex def /x1 vertex VertexX def /y1 vertex VertexY def /vertex id2 GetVertex def /x2 vertex VertexX def /y2 vertex VertexY def ProcessEdgeAttributes id1 id2 ne {/a y2 y1 sub x2 x1 sub atan def /r y2 y1 sub dup mul x2 x1 sub dup mul add sqrt def x1 y1 translate a rotate EdgeType /normal eq {true VRad 0 VRad 0 r VRad sub 0 PrintThreePointEdge }{/sx1 VRad StartAngle cos mul def /sy1 VRad StartAngle sin mul def /sx3 r VRad EndAngle cos mul sub def /sy3 VRad EndAngle sin mul def /sxo sx1 sx3 add 2 div def /syo sy1 sy3 add 2 div def /sr sx3 sx1 sub dup mul sy3 sy1 sub dup mul add sqrt def /sh sr Deviation mul def /alpha sy3 sy1 sub sx3 sx1 sub atan def /sx2 sxo alpha sin sh mul sub def /sy2 syo alpha cos sh mul add def EdgeType /leftedge eq {false sx1 sy1 sx2 sy2 sx3 sy3 }{true sx1 sy1 neg sx2 sy2 neg sx3 sy3 neg }ifelse PrintThreePointEdge }ifelse }{x1 y1 translate StartAngle rotate /ha OpenAngle 2 div def /sx1 VRad ha cos mul def /sy1 VRad ha sin mul def /sx2 sy1 dup add Deviation mul def EdgeType /leftedge eq {false sx1 sy1 sx2 0 sx1 sy1 neg }{true sx1 sy1 neg sx2 0 sx1 sy1 }ifelse PrintThreePointEdge }ifelse grestore end }bind def 
/Edge {2 dict begin /id1 /id2 /attr 3 BindPars /e mark id1 id2 attr ] def $VertexDict id1 Name mark $VertexDict id1 Name get aload pop e ] put $EdgeDict e TableStore id1 id2 attr PrintEdge end }bind def 
/PrintVertex {10 dict begin /id /attr 2 BindPars /vertex id GetVertex def gsave ProcessVertexAttributes Visible {newpath vertex VertexX vertex VertexY VRad 0 360 arc stroke id vertex VertexX vertex VertexY PrintVertexLabel }if grestore end }bind def 
/Vertex {3 dict begin /id /x /y /attr 4 BindPars $VertexDict id Name mark id x y attr ] put id attr PrintVertex end }bind def 
/Graphics {dup $GraphicsDict exch TableStore 1 get exec }bind def 
/LineIntersection {20 dict begin line1 line2 2 BindPars line1 aload pop /ax /ay /rx /ry 4 BindPars line2 aload pop /bx /by /sx /sy 4 BindPars /nim ay bx mul ax by mul sub def nim abs 0.1 lt {null }{/f by rx sx sub mul bx ry sy sub mul sub nim div def /p0x rx ax f mul add def /p0y ry ay f mul add def mark p0x p0y ] }ifelse end }bind def 
/OrigoX -62 def 
/Fonts [[/ScriptFont /Times-Roman 12 ][/DataFont /Times-Italic 16 ][/LabelFont /Times-Italic 20 ]]bind def 
/GetVertex {$VertexDict exch Name get }bind def 
/loc 3 def 
/DataItemFont {0 get load }bind def 
/FD {4 dict begin /FDname /FDfont /FDsize 3 BindPars $GraphOperDict FDname FDfont findfont FDsize scalefont put $FontDict FDname mark FDfont FDsize ] put end }bind def 
/DataItemYskip {2 get }bind def 
/DataBox {16 dict begin /item exch def /fnt item DataItemFont def /xskip item DataItemXskip def /yskip item DataItemYskip def /str item DataItemString def fnt setfont newpath 0 0 moveto str false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def str stringwidth pop /vx exch def /vy uy ly sub def 0 vx 0.5 mul sub vx 0.5 mul VRad 2 mul add xskip mul add /lx exch def 0 vy 0.5 mul sub vy 0.5 mul VRad 2 mul add yskip mul add /ly exch def lx ly lx vx add ly vy add end }bind def 
/VRad 13 def 
/VertexY {2 get }bind def 
/OrigoY -40 def 
/BindPars {/loc exch def loc {loc index def }repeat loc {pop }repeat }bind def 
/LabelType /Normal def 
/DataItemXskip {1 get }bind def 
/InitGraph {/OrigoX /OrigoY /VRad /Fonts /LabelType 5 BindPars OrigoX OrigoY translate Fonts {aload pop FD }forall }bind def 
/DataItemString {3 get }bind def 
/VertexX {1 get }bind def 
end
/$GraphsBegin {$GraphOperDict begin /$GraphsEnteredState save def }bind def 
/$GraphsEnd {$GraphsEnteredState restore end }bind def 
$GraphsBegin
-62 -40 13 [[/ScriptFont /Times-Roman 12 ][/DataFont /Times-Italic 16 ][/LabelFont /Times-Italic 20 ]] /Normal  InitGraph
(3) 200 125 null Vertex
(5) 400 275 null Vertex
(7) 500 275 null Vertex
(2) 200 275 null Vertex
(4) 300 200 null Vertex
(6) 400 125 null Vertex
(8) 500 125 null Vertex
(1) 100 200 null Vertex
(5) (7) [[/deviation 0.05 ][/edgetype /leftedge ]] Edge
(2) (2) [[/startangle 135 ][/deviation 2 ][/edgetype /rightedge ]] Edge
(5) (5) [[/startangle 90 ][/deviation 2 ]] Edge
(6) (8) [[/deviation 0.05 ][/edgetype /rightedge ]] Edge
(2) (6) [[/edgetype /rightedge ][/deviation 0.12 ][/startangle 15 ]] Edge
(6) (7) [[/edgetype /rightedge ][/deviation 0.05 ][/startangle 5 ]] Edge
(8) (6) [[/deviation 0.05 ][/edgetype /rightedge ]] Edge
(2) (8) [[/edgetype /leftedge ][/deviation 0.05 ][/startangle 15 ][/endangle 20 ]] Edge
(8) (5) [[/edgetype /rightedge ][/deviation 0.05 ][/startangle 5 ]] Edge
(1) (2) [[/edgetype /rightedge ][/deviation 0.05 ][/startangle 15 ]] Edge
(1) (3) [[/edgetype /leftedge ][/deviation 0.05 ][/startangle 15 ]] Edge
(3) (3) [[/startangle -135 ][/deviation 2 ]] Edge
(8) (8) [[/startangle 0 ][/deviation 2 ]] Edge
(3) (1) [[/edgetype /leftedge ][/deviation 0.05 ][/startangle 15 ]] Edge
(1) (5) [[/edgetype /leftedge ][/deviation 0.07 ][/startangle -5 ][/endangle 10 ]] Edge
(3) (6) [[/edgetype /rightedge ][/deviation 0.05 ]] Edge
(3) (4) [] Edge
(1) (7) [[/edgetype /leftedge ][/deviation 0.26 ][/startangle 90 ]] Edge
(3) (8) [[/edgetype /rightedge ][/deviation 0.15 ][/startangle 45 ]] Edge
(4) (6) [] Edge
(2) (1) [[/edgetype /rightedge ][/deviation 0.05 ][/startangle 15 ]] Edge
(4) (8) [[/edgetype /leftedge ][/deviation 0.0001 ][/startangle 5 ]] Edge
(6) (5) [] Edge
(2) (5) [[/edgetype /leftedge ][/deviation 0.05 ]] Edge
(6) (6) [[/startangle -90 ][/deviation 2 ]] Edge
(7) (5) [[/deviation 0.05 ][/edgetype /leftedge ]] Edge
(2) (7) [[/edgetype /leftedge ][/deviation 0.15 ][/startangle 45 ]] Edge
(7) (7) [[/startangle 0 ][/deviation 2 ]] Edge
(1) (1) [[/startangle 180 ][/deviation 2 ]] Edge
(3) (2) [[/edgetype /leftedge ][/deviation 0.05 ][/startangle 15 ]] Edge
(8) (7) [] Edge
(2) (3) [[/edgetype /leftedge ][/deviation 0.05 ][/startangle 15 ]] Edge
(1) (4) [] Edge
(3) (5) [[/edgetype /leftedge ][/deviation 0.12 ][/startangle 15 ]] Edge
(2) (4) [] Edge
(1) (6) [[/edgetype /rightedge ][/deviation 0.07 ][/startangle -5 ][/endangle 10 ]] Edge
(3) (7) [[/edgetype /rightedge ][/deviation 0.05 ][/startangle 15 ]] Edge
(4) (5) [] Edge
(1) (8) [[/edgetype /rightedge ][/deviation 0.26 ][/startangle 90 ]] Edge
(4) (7) [] Edge
[[62 40 538 360 ]{}] Graphics
$GraphsEnd
 @endspecial 570 5838 a Fd(Figure)j(2.2)p Fr(:)44 b(The)33
b(transitiv)m(e)f(closure)h(of)f(graph)h Fn(G)f Fr(of)g(Figure)g(2.1)o
(.)p eop
16 3 bop -116 -294 a Fr(16)-116 18 y Fp(Example)38 b(2.4.)c
Fr(The)h(transitiv)m(e)f(closure)g(of)f(graph)h Fn(G)p
Fr(,)h(presen)m(ted)h(in)d(Figure)f(2.2)o(,)j(can)f(b)s(e)g(c)m(hanged)
h(to)-116 152 y(the)k(re\015exiv)m(e)i(transitiv)m(e)e(closure)g(of)g
(graph)g Fn(G)g Fr(b)m(y)h(inserting)e(the)i(edge)g(\()p
Fn(v)2776 167 y Fi(4)2815 152 y Fn(;)17 b(v)2906 167
y Fi(4)2946 152 y Fr(\),)40 b(since)g Fn(E)3375 116 y
Fl(\003)3453 152 y Fr(=)f Fn(E)3646 116 y Fi(+)3732 152
y Fm([)27 b Fn(I)-116 286 y Fr(where)34 b Fn(I)h Fr(=)28
b Fm(f)p Fr(\()p Fn(v)t(;)17 b(v)t Fr(\))26 b Fm(j)i
Fn(v)j Fm(2)d Fn(V)22 b Fm(g)p Fr(,)32 b(the)h(iden)m(tit)m(y)f
(relation.)p 1986 286 4 67 v 1990 223 59 4 v 1990 286
V 2047 286 4 67 v -116 467 a Fp(De\014nition)p Fr(.)63
b(Tw)m(o)33 b(v)m(ertices)h Fn(v)i Fr(and)c Fn(w)j Fr(in)c
Fn(G)i Fr(are)f Fo(p)-5 b(ath)34 b(e)-5 b(quivalent)42
b Fr(i\013)31 b Fn(G)h Fr(con)m(tains)g(a)g(path)h Fn(v)3466
414 y Fl(\003)3434 467 y Fm(!)o Fn(w)i Fr(and)d(a)-116
601 y(path)g Fn(w)216 548 y Fl(\003)184 601 y Fm(!)o
Fn(v)t Fr(.)43 b(P)m(ath)33 b(equiv)-5 b(alence)32 b(divides)h
Fn(V)53 b Fr(in)m(to)32 b(maximal)d(disjoin)m(t)i(sets)i(of)f(path)g
(equiv)-5 b(alen)m(t)33 b(v)m(ertices.)-116 735 y(These)40
b(sets)h(are)e(called)e(the)j Fo(str)-5 b(ong)40 b(c)-5
b(omp)g(onents)46 b Fr(of)38 b Fn(G)p Fr(.)63 b(The)40
b(strong)f(comp)s(onen)m(t)g(con)m(taining)e(v)m(ertex)-116
868 y Fn(v)42 b Fr(is)c(denoted)i Fo(Comp)o Fr(\()p Fn(v)t
Fr(\).)61 b(A)39 b(strong)f(comp)s(onen)m(t)h(that)f(con)m(tains)h
(only)f(one)h(v)m(ertex)h(is)e(called)g(a)g Fo(trivial)-116
1002 y(c)-5 b(omp)g(onent)p Fr(.)42 b(The)32 b Fo(c)-5
b(ondensation)32 b(gr)-5 b(aph)p 1452 924 77 4 v 33 w
Fn(G)27 b Fr(=)h(\()p 1698 924 79 4 v Fn(V)21 b(;)p 1820
924 V 17 w(E)6 b Fr(\))34 b Fo(induc)-5 b(e)g(d)33 b(by)g(the)h(str)-5
b(ong)33 b(c)-5 b(omp)g(onents)33 b(of)g(gr)-5 b(aph)33
b Fn(G)-116 1135 y Fr(is)28 b(a)g(graph)g(suc)m(h)i(that)p
751 1057 V 29 w Fn(V)50 b Fr(is)28 b(the)g(set)i(of)e(the)h(strong)f
(comp)s(onen)m(ts)h(of)f Fn(G)h Fr(and)p 2760 1057 V
28 w Fn(E)35 b Fr(con)m(tains)28 b(an)h(edge)g(\()p Fn(X)r(;)17
b(Y)k Fr(\))-116 1269 y(i\013)31 b Fn(E)39 b Fr(con)m(tains)32
b(an)h(edge)g(\()p Fn(u;)17 b(v)t Fr(\))31 b(suc)m(h)k(that)d
Fo(Comp)o Fr(\()p Fn(u)p Fr(\))27 b(=)h Fn(X)40 b Fr(and)33
b Fo(Comp)o Fr(\()p Fn(v)t Fr(\))27 b(=)g Fn(Y)22 b Fr(.)30
1451 y(Eac)m(h)27 b(v)m(ertex)h(of)e(a)g(strong)g(comp)s(onen)m(t)g
(has)g(the)h(same)f(successor)i(set;)i(this)25 b(can)i(b)s(e)f(used)h
(in)f(designing)-116 1584 y(e\016cien)m(t)33 b(transitiv)m(e)f(closure)
h(algorithms.)-116 1766 y Fp(Example)f(2.5.)c Fr(The)i(strong)e(comp)s
(onen)m(ts)h(of)f(graph)g Fn(G)h Fr(are)f(encircled)g(in)g(Figure)k
(2.3\(a\))o(.)42 b(The)29 b(conden-)-116 1900 y(sation)34
b(graph)p 453 1822 77 4 v 35 w Fn(G)h Fr(induced)g(b)m(y)h(the)f
(strong)g(comp)s(onen)m(ts)h(of)e Fn(G)h Fr(is)g(sho)m(wn)h(in)e
(Figure)e(2.3\(b\))o(.)51 b(Note)35 b(that)-116 2033
y(the)e(condensation)g(graph)f(is)g(alw)m(a)m(ys)h(acyclic)f(if)g(w)m
(e)h(remo)m(v)m(e)h(the)f(self-lo)s(op)d(edges.)p 3060
2033 4 67 v 3064 1970 59 4 v 3064 2033 V 3121 2033 4
67 v -116 2263 a Fp(De\014nition)p Fr(.)66 b(A)34 b Fo(top)-5
b(olo)g(gic)g(al)35 b(or)-5 b(der)45 b Fr(of)33 b(the)i(v)m(ertex)g
(set)g Fn(V)55 b Fr(of)34 b(a)g(graph)f Fn(G)d Fr(=)g(\()p
Fn(V)5 b(;)17 b(E)6 b Fr(\))34 b(is)g(an)m(y)g(total)f(order)-116
2397 y Fm(\024)g Fr(of)g Fn(V)55 b Fr(suc)m(h)34 b(that)f
Fn(v)g Fm(\024)c Fn(w)35 b Fr(if)d(edge)i(\()p Fn(v)t(;)17
b(w)s Fr(\))32 b(is)h(in)f Fn(E)6 b Fr(.)45 b(If)33 b
Fn(v)g Fm(\024)c Fn(w)s Fr(,)k(w)m(e)h(sa)m(y)g(that)f
Fn(v)k Fr(is)32 b Fo(top)-5 b(olo)g(gic)g(al)5 b(ly)35
b(smal)5 b(ler)-116 2530 y Fr(than)34 b Fn(w)i Fr(and)e
Fn(w)i Fr(is)d Fo(top)-5 b(olo)g(gic)g(al)5 b(ly)35 b(gr)-5
b(e)g(ater)44 b Fr(than)34 b Fn(v)t Fr(.)47 b(The)35
b(rev)m(erse)h(relation)31 b(of)j(a)f(top)s(ological)d(order)k
Fm(\024)g Fr(of)-116 2664 y(a)e(v)m(ertex)i(set)g Fn(V)54
b Fr(is)32 b(called)f(a)i Fo(r)-5 b(everse)34 b(top)-5
b(olo)g(gic)g(al)34 b(or)-5 b(der)42 b Fr(of)33 b Fn(V)21
b Fr(.)463 4078 y @beginspecial 0 @llx 0 @lly 489 @urx
216 @ury 3401 @rwi @setspecial
/$GraphOperDict 200 dict def
/$VertexDict 1000 dict def
/$EdgeDict 1000 dict def
/$DataDict 1000 dict def
/$GraphicsDict 1000 dict def
/$FontDict 200 dict def
$GraphOperDict begin
/ChainRad {2.3 VRad mul }bind def 
/Gensym {GensymCounter dup 1 add /GensymCounter exch store 10 string cvs dup length 1 add string dup <67>0 exch putinterval dup 1 4 3 roll putinterval cvn }bind def 
/Chain {mark 1 index /Chain ] DataTableStore aload length dup 1 eq {pop UnitChain }{1 sub {1 index 3 1 roll ChainLink }repeat pop }ifelse }bind def 
/PrintVertexLabel {16 dict begin /id /x /y 3 BindPars LabelType /Normal eq {VertexLabelName id x y PrintSubscriptedLabel }{LabelType /Simple eq {LabelFont setfont newpath 0 0 moveto id false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def id stringwidth pop /vx exch def /vy uy ly sub def x vx 0.5 mul sub y vy 0.5 mul sub moveto id show }{}ifelse }ifelse end }bind def 
/CountLine {10 dict begin /id1 /id2 2 BindPars id1 GetVertex dup VertexX /x1 exch def VertexY /y1 exch def id2 GetVertex dup VertexX /x2 exch def VertexY /y2 exch def /dx x2 x1 sub def /dy y2 y1 sub def /dl dx dup mul dy dup mul add sqrt def /nx PDist dy neg dl div mul def /ny PDist dx dl div mul def mark dx dy x1 nx add y1 ny add ] end }bind def 
/ProcessVertexAttributes {0 setlinejoin 0 setlinecap /Visible true def attr type /arraytype eq {attr {/item exch def item 0 get /Visible eq {/Visible item 1 get def }{<496c6c6567616c206974656d0a>}ifelse }forall }if Visible {0.0 setcolor }{1.0 setcolor }ifelse }bind def 
/PrintEdgeHead {3 dict begin /x /y /angle 3 BindPars x y translate angle rotate newpath 0 0 moveto VRad 1.0 div VRad 3.5 div 1 index 1 index neg lineto lineto closepath fill end }bind def 
/Name {30 string cvs dup length 1 add string dup 0 <76>putinterval dup 1 4 3 roll putinterval cvn }bind def 
/ProcessEdgeAttributes {0 setlinejoin 0 setlinecap id1 id2 eq {/StartAngle 0 def /EndAngle null def /OpenAngle 90 def /Deviation 3 def /EdgeType /leftedge def }{/StartAngle 20 def /EndAngle null def /Deviation 0.1 def /EdgeType /normal def }ifelse attr type /arraytype eq {attr {/item exch def item 0 get /setdash eq {item 1 get item 2 get setdash }{item 0 get /deviation eq {/Deviation item 1 get def }{item 0 get /edgetype eq {/EdgeType item 1 get def }{item 0 get /startangle eq {/StartAngle item 1 get def }{item 0 get /endangle eq {/EndAngle item 1 get def }{item 0 get /OpenAngle eq {/OpenAngle item 1 get def }{<496c6c6567616c206974656d0a>}ifelse }ifelse }ifelse }ifelse }ifelse }ifelse }forall }if EndAngle null eq {/EndAngle StartAngle def }if }bind def 
/PrintThreePointEdge {20 dict begin /clockwise /x1 /y1 /x2 /y2 /x3 /y3 7 BindPars /nim y1 x2 x3 sub mul x1 y3 y2 sub mul add y2 x3 mul add x2 y3 mul sub 2 mul def nim 0 ne {/xos x1 dup mul y1 dup mul add y2 y3 mul add y3 y2 sub mul x2 dup mul y1 y3 sub mul add x3 dup mul y2 y1 sub mul add y1 y2 dup mul y3 dup mul sub mul add def /yos x1 dup mul y1 dup mul add x2 x3 mul add x2 x3 sub mul y2 dup mul x3 x1 sub mul add y3 dup mul x1 x2 sub mul add x1 x3 dup mul x2 dup mul sub mul add def /x xos nim div def /y yos nim div def /r x x1 sub dup mul y y1 sub dup mul add sqrt def /a1 y1 y sub x1 x sub atan def /a3 y3 y sub x3 x sub atan def newpath x y r a1 a3 clockwise {arc }{arcn }ifelse stroke /aux VRad r dup mul 4 mul VRad dup mul sub sqrt atan def x3 y3 a3 90 aux add clockwise {neg }if add PrintEdgeHead }{newpath x1 y1 moveto x3 y3 lineto stroke x3 y3 180 PrintEdgeHead }ifelse end }bind def 
/TableStore {Gensym exch put }bind def 
/ProjectPoint {10 dict begin /lin /x /y 3 BindPars lin aload pop /dx /dy /x0 /y0 4 BindPars /dl dx dup mul dy dup mul add def dy dup mul x0 mul dx dy mul y0 mul sub dx dup mul x mul add dx dy mul y mul add dl div dx dup mul y0 mul dx dy mul x0 mul sub dy dup mul y mul add dx dy mul x mul add dl div end }bind def 
/GensymCounter 13 def 
/UnitChain {gsave mark 4 ] 0 setdash 2 setlinewidth 1 setlinecap newpath GetVertex dup VertexX exch VertexY translate 0 0 ChainRad 0 360 arc stroke grestore }bind def 
/VertexData {10 dict begin /id /item 2 BindPars id GetVertex dup VertexX /x exch def VertexY /y exch def item {dup DataBox pop pop y add exch x add exch moveto dup DataItemFont setfont DataItemString show }forall mark id item /VertexData ] DataTableStore end }bind def 
/VertexLabelName <76>def 
/ChainLink {20 dict begin /id1 /id2 2 BindPars gsave mark 4 ] 0 setdash 2 setlinewidth 1 setlinecap /vertex1 id1 GetVertex def /vertex2 id2 GetVertex def /x1 vertex1 VertexX def /y1 vertex1 VertexY def /x2 vertex2 VertexX def /y2 vertex2 VertexY def /dist x2 x1 sub dup mul y2 y1 sub dup mul add sqrt def x1 y1 translate y2 y1 sub x2 x1 sub atan rotate newpath 0 0 ChainRad sub moveto dist 0 ChainRad -90 90 arc 0 0 ChainRad 90 270 arc closepath stroke grestore end }bind def 
/DataTableStore {$DataDict exch TableStore }bind def 
/ClosedPolyLine {20 dict begin /ids exch def /idcount ids length def /PDist VRad 2.5 mul def idcount 1 eq {newpath ids 0 get GetVertex dup VertexX exch VertexY PDist 0 360 arc stroke }{newpath 0 1 idcount 1 sub {/i exch def /id1 ids i 1 sub idcount add idcount mod get def /id2 ids i get def /id3 ids i 1 add idcount mod get def /line1 id1 id2 CountLine def /line2 id2 id3 CountLine def /p0 line1 line2 LineIntersection def p0 null eq {id2 GetVertex dup VertexX exch VertexY PDist line1 1 get line1 0 get atan 90 add dup 180 sub arcn }{i 0 eq {line1 id1 GetVertex dup VertexX exch VertexY ProjectPoint /oy1 exch def /ox1 exch def line1 id2 GetVertex dup VertexX exch VertexY ProjectPoint /oy2 exch def /ox2 exch def ox1 ox2 add 2 div oy1 oy2 add 2 div moveto }if p0 0 get p0 1 get line2 id2 GetVertex dup VertexX exch VertexY ProjectPoint /oy1 exch def /ox1 exch def line2 id3 GetVertex dup VertexX exch VertexY ProjectPoint /oy2 exch def /ox2 exch def ox1 ox2 add 2 div oy1 oy2 add 2 div PDist arct }ifelse }for closepath stroke }ifelse end }bind def 
/PrintSubscriptedLabel {10 dict begin /ch /subscr /x /y 4 BindPars /cx 0.85 def /cy 0.85 def LabelFont setfont newpath 0 0 moveto ch false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def /vx ux lx sub def /vy uy ly sub def ScriptFont setfont newpath 0 0 moveto subscr false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def /ix ux lx sub def /iy uy ly sub def /wx vx cx mul ix add def /wy vy cy mul iy add def LabelFont setfont x wx 0.5 mul sub y wy 0.5 mul vy sub add moveto ch show ScriptFont setfont x cx vx mul wx 0.5 mul sub add y wy 0.5 mul sub moveto subscr show end }bind def 
/PrintEdge {40 dict begin /id1 /id2 /attr 3 BindPars gsave /vertex id1 GetVertex def /x1 vertex VertexX def /y1 vertex VertexY def /vertex id2 GetVertex def /x2 vertex VertexX def /y2 vertex VertexY def ProcessEdgeAttributes id1 id2 ne {/a y2 y1 sub x2 x1 sub atan def /r y2 y1 sub dup mul x2 x1 sub dup mul add sqrt def x1 y1 translate a rotate EdgeType /normal eq {true VRad 0 VRad 0 r VRad sub 0 PrintThreePointEdge }{/sx1 VRad StartAngle cos mul def /sy1 VRad StartAngle sin mul def /sx3 r VRad EndAngle cos mul sub def /sy3 VRad EndAngle sin mul def /sxo sx1 sx3 add 2 div def /syo sy1 sy3 add 2 div def /sr sx3 sx1 sub dup mul sy3 sy1 sub dup mul add sqrt def /sh sr Deviation mul def /alpha sy3 sy1 sub sx3 sx1 sub atan def /sx2 sxo alpha sin sh mul sub def /sy2 syo alpha cos sh mul add def EdgeType /leftedge eq {false sx1 sy1 sx2 sy2 sx3 sy3 }{true sx1 sy1 neg sx2 sy2 neg sx3 sy3 neg }ifelse PrintThreePointEdge }ifelse }{x1 y1 translate StartAngle rotate /ha OpenAngle 2 div def /sx1 VRad ha cos mul def /sy1 VRad ha sin mul def /sx2 sy1 dup add Deviation mul def EdgeType /leftedge eq {false sx1 sy1 sx2 0 sx1 sy1 neg }{true sx1 sy1 neg sx2 0 sx1 sy1 }ifelse PrintThreePointEdge }ifelse grestore end }bind def 
/Edge {2 dict begin /id1 /id2 /attr 3 BindPars /e mark id1 id2 attr ] def $VertexDict id1 Name mark $VertexDict id1 Name get aload pop e ] put $EdgeDict e TableStore id1 id2 attr PrintEdge end }bind def 
/PrintVertex {10 dict begin /id /attr 2 BindPars /vertex id GetVertex def gsave ProcessVertexAttributes Visible {newpath vertex VertexX vertex VertexY VRad 0 360 arc stroke id vertex VertexX vertex VertexY PrintVertexLabel }if grestore end }bind def 
/Vertex {3 dict begin /id /x /y /attr 4 BindPars $VertexDict id Name mark id x y attr ] put id attr PrintVertex end }bind def 
/Graphics {dup $GraphicsDict exch TableStore 1 get exec }bind def 
/LineIntersection {20 dict begin line1 line2 2 BindPars line1 aload pop /ax /ay /rx /ry 4 BindPars line2 aload pop /bx /by /sx /sy 4 BindPars /nim ay bx mul ax by mul sub def nim abs 0.1 lt {null }{/f by rx sx sub mul bx ry sy sub mul sub nim div def /p0x rx ax f mul add def /p0y ry ay f mul add def mark p0x p0y ] }ifelse end }bind def 
/OrigoX -45 def 
/Fonts [[/ScriptFont /Times-Roman 12 ][/DataFont /Times-Italic 16 ][/LabelFont /Times-Italic 20 ]]bind def 
/GetVertex {$VertexDict exch Name get }bind def 
/loc 5 def 
/DataItemFont {0 get load }bind def 
/FD {4 dict begin /FDname /FDfont /FDsize 3 BindPars $GraphOperDict FDname FDfont findfont FDsize scalefont put $FontDict FDname mark FDfont FDsize ] put end }bind def 
/DataItemYskip {2 get }bind def 
/DataBox {16 dict begin /item exch def /fnt item DataItemFont def /xskip item DataItemXskip def /yskip item DataItemYskip def /str item DataItemString def fnt setfont newpath 0 0 moveto str false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def str stringwidth pop /vx exch def /vy uy ly sub def 0 vx 0.5 mul sub vx 0.5 mul VRad 2 mul add xskip mul add /lx exch def 0 vy 0.5 mul sub vy 0.5 mul VRad 2 mul add yskip mul add /ly exch def lx ly lx vx add ly vy add end }bind def 
/VRad 13 def 
/VertexY {2 get }bind def 
/OrigoY -92 def 
/BindPars {/loc exch def loc {loc index def }repeat loc {pop }repeat }bind def 
/LabelType /Normal def 
/DataItemXskip {1 get }bind def 
/InitGraph {/OrigoX /OrigoY /VRad /Fonts /LabelType 5 BindPars OrigoX OrigoY translate Fonts {aload pop FD }forall }bind def 
/DataItemString {3 get }bind def 
/VertexX {1 get }bind def 
end
/$GraphsBegin {$GraphOperDict begin /$GraphsEnteredState save def }bind def 
/$GraphsEnd {$GraphsEnteredState restore end }bind def 
$GraphsBegin
-45 -92 13 [[/ScriptFont /Times-Roman 12 ][/DataFont /Times-Italic 16 ][/LabelFont /Times-Italic 20 ]] /Normal  InitGraph
(5) 400 275 null Vertex
(7) 500 275 null Vertex
(2) 200 275 null Vertex
(4) 300 200 null Vertex
(6) 400 125 null Vertex
(8) 500 125 null Vertex
(1) 100 200 null Vertex
(3) 200 125 null Vertex
(6) (8) [[/deviation 0.05 ][/edgetype /rightedge ]] Edge
(8) (6) [[/deviation 0.05 ][/edgetype /rightedge ]] Edge
(1) (2) [] Edge
(3) (1) [] Edge
(3) (4) [] Edge
(4) (6) [] Edge
(6) (5) [] Edge
(7) (5) [[/deviation 0.05 ][/edgetype /leftedge ]] Edge
(2) (3) [] Edge
(2) (4) [] Edge
(4) (5) [] Edge
(5) (7) [[/deviation 0.05 ][/edgetype /leftedge ]] Edge
[[45 92 534 308 ]{gsave mark 2.0 4.0 ] 0.0 setdash mark <31><32><33>] ClosedPolyLine 45 197 moveto LabelFont setfont <43>show ScriptFont setfont -2 -6 rmoveto <31>show mark <34>] ClosedPolyLine 245 197 moveto LabelFont setfont <43>show ScriptFont setfont -2 -6 rmoveto <32>show mark <35><37>] ClosedPolyLine 345 272 moveto LabelFont setfont <43>show ScriptFont setfont -2 -6 rmoveto <33>show mark <36><38>] ClosedPolyLine 345 122 moveto LabelFont setfont <43>show ScriptFont setfont -2 -6 rmoveto <34>show grestore }] Graphics
$GraphsEnd
 @endspecial 1809 4212 a Fp(\(a\))1048 5405 y @beginspecial
0 @llx 0 @lly 287 @urx 188 @ury 1995 @rwi @setspecial
/$GraphOperDict 200 dict def
/$VertexDict 1000 dict def
/$EdgeDict 1000 dict def
/$DataDict 1000 dict def
/$GraphicsDict 1000 dict def
/$FontDict 200 dict def
$GraphOperDict begin
/ChainRad {2.3 VRad mul }bind def 
/Gensym {GensymCounter dup 1 add /GensymCounter exch store 10 string cvs dup length 1 add string dup <67>0 exch putinterval dup 1 4 3 roll putinterval cvn }bind def 
/Chain {mark 1 index /Chain ] DataTableStore aload length dup 1 eq {pop UnitChain }{1 sub {1 index 3 1 roll ChainLink }repeat pop }ifelse }bind def 
/PrintVertexLabel {16 dict begin /id /x /y 3 BindPars LabelType /Normal eq {VertexLabelName id x y PrintSubscriptedLabel }{LabelType /Simple eq {LabelFont setfont newpath 0 0 moveto id false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def id stringwidth pop /vx exch def /vy uy ly sub def x vx 0.5 mul sub y vy 0.5 mul sub moveto id show }{}ifelse }ifelse end }bind def 
/CountLine {10 dict begin /id1 /id2 2 BindPars id1 GetVertex dup VertexX /x1 exch def VertexY /y1 exch def id2 GetVertex dup VertexX /x2 exch def VertexY /y2 exch def /dx x2 x1 sub def /dy y2 y1 sub def /dl dx dup mul dy dup mul add sqrt def /nx PDist dy neg dl div mul def /ny PDist dx dl div mul def mark dx dy x1 nx add y1 ny add ] end }bind def 
/ProcessVertexAttributes {0 setlinejoin 0 setlinecap /Visible true def attr type /arraytype eq {attr {/item exch def item 0 get /Visible eq {/Visible item 1 get def }{<496c6c6567616c206974656d0a>}ifelse }forall }if Visible {0.0 setcolor }{1.0 setcolor }ifelse }bind def 
/PrintEdgeHead {3 dict begin /x /y /angle 3 BindPars x y translate angle rotate newpath 0 0 moveto VRad 1.0 div VRad 3.5 div 1 index 1 index neg lineto lineto closepath fill end }bind def 
/Name {30 string cvs dup length 1 add string dup 0 <76>putinterval dup 1 4 3 roll putinterval cvn }bind def 
/ProcessEdgeAttributes {0 setlinejoin 0 setlinecap id1 id2 eq {/StartAngle 0 def /EndAngle null def /OpenAngle 90 def /Deviation 3 def /EdgeType /leftedge def }{/StartAngle 20 def /EndAngle null def /Deviation 0.1 def /EdgeType /normal def }ifelse attr type /arraytype eq {attr {/item exch def item 0 get /setdash eq {item 1 get item 2 get setdash }{item 0 get /deviation eq {/Deviation item 1 get def }{item 0 get /edgetype eq {/EdgeType item 1 get def }{item 0 get /startangle eq {/StartAngle item 1 get def }{item 0 get /endangle eq {/EndAngle item 1 get def }{item 0 get /OpenAngle eq {/OpenAngle item 1 get def }{<496c6c6567616c206974656d0a>}ifelse }ifelse }ifelse }ifelse }ifelse }ifelse }forall }if EndAngle null eq {/EndAngle StartAngle def }if }bind def 
/PrintThreePointEdge {20 dict begin /clockwise /x1 /y1 /x2 /y2 /x3 /y3 7 BindPars /nim y1 x2 x3 sub mul x1 y3 y2 sub mul add y2 x3 mul add x2 y3 mul sub 2 mul def nim 0 ne {/xos x1 dup mul y1 dup mul add y2 y3 mul add y3 y2 sub mul x2 dup mul y1 y3 sub mul add x3 dup mul y2 y1 sub mul add y1 y2 dup mul y3 dup mul sub mul add def /yos x1 dup mul y1 dup mul add x2 x3 mul add x2 x3 sub mul y2 dup mul x3 x1 sub mul add y3 dup mul x1 x2 sub mul add x1 x3 dup mul x2 dup mul sub mul add def /x xos nim div def /y yos nim div def /r x x1 sub dup mul y y1 sub dup mul add sqrt def /a1 y1 y sub x1 x sub atan def /a3 y3 y sub x3 x sub atan def newpath x y r a1 a3 clockwise {arc }{arcn }ifelse stroke /aux VRad r dup mul 4 mul VRad dup mul sub sqrt atan def x3 y3 a3 90 aux add clockwise {neg }if add PrintEdgeHead }{newpath x1 y1 moveto x3 y3 lineto stroke x3 y3 180 PrintEdgeHead }ifelse end }bind def 
/TableStore {Gensym exch put }bind def 
/ProjectPoint {10 dict begin /lin /x /y 3 BindPars lin aload pop /dx /dy /x0 /y0 4 BindPars /dl dx dup mul dy dup mul add def dy dup mul x0 mul dx dy mul y0 mul sub dx dup mul x mul add dx dy mul y mul add dl div dx dup mul y0 mul dx dy mul x0 mul sub dy dup mul y mul add dx dy mul x mul add dl div end }bind def 
/GensymCounter 7 def 
/UnitChain {gsave mark 4 ] 0 setdash 2 setlinewidth 1 setlinecap newpath GetVertex dup VertexX exch VertexY translate 0 0 ChainRad 0 360 arc stroke grestore }bind def 
/VertexData {10 dict begin /id /item 2 BindPars id GetVertex dup VertexX /x exch def VertexY /y exch def item {dup DataBox pop pop y add exch x add exch moveto dup DataItemFont setfont DataItemString show }forall mark id item /VertexData ] DataTableStore end }bind def 
/VertexLabelName <43>def 
/ChainLink {20 dict begin /id1 /id2 2 BindPars gsave mark 4 ] 0 setdash 2 setlinewidth 1 setlinecap /vertex1 id1 GetVertex def /vertex2 id2 GetVertex def /x1 vertex1 VertexX def /y1 vertex1 VertexY def /x2 vertex2 VertexX def /y2 vertex2 VertexY def /dist x2 x1 sub dup mul y2 y1 sub dup mul add sqrt def x1 y1 translate y2 y1 sub x2 x1 sub atan rotate newpath 0 0 ChainRad sub moveto dist 0 ChainRad -90 90 arc 0 0 ChainRad 90 270 arc closepath stroke grestore end }bind def 
/DataTableStore {$DataDict exch TableStore }bind def 
/ClosedPolyLine {20 dict begin /ids exch def /idcount ids length def /PDist VRad 2.5 mul def idcount 1 eq {newpath ids 0 get GetVertex dup VertexX exch VertexY PDist 0 360 arc stroke }{newpath 0 1 idcount 1 sub {/i exch def /id1 ids i 1 sub idcount add idcount mod get def /id2 ids i get def /id3 ids i 1 add idcount mod get def /line1 id1 id2 CountLine def /line2 id2 id3 CountLine def /p0 line1 line2 LineIntersection def p0 null eq {id2 GetVertex dup VertexX exch VertexY PDist line1 1 get line1 0 get atan 90 add dup 180 sub arcn }{i 0 eq {line1 id1 GetVertex dup VertexX exch VertexY ProjectPoint /oy1 exch def /ox1 exch def line1 id2 GetVertex dup VertexX exch VertexY ProjectPoint /oy2 exch def /ox2 exch def ox1 ox2 add 2 div oy1 oy2 add 2 div moveto }if p0 0 get p0 1 get line2 id2 GetVertex dup VertexX exch VertexY ProjectPoint /oy1 exch def /ox1 exch def line2 id3 GetVertex dup VertexX exch VertexY ProjectPoint /oy2 exch def /ox2 exch def ox1 ox2 add 2 div oy1 oy2 add 2 div PDist arct }ifelse }for closepath stroke }ifelse end }bind def 
/PrintSubscriptedLabel {10 dict begin /ch /subscr /x /y 4 BindPars /cx 0.85 def /cy 0.85 def LabelFont setfont newpath 0 0 moveto ch false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def /vx ux lx sub def /vy uy ly sub def ScriptFont setfont newpath 0 0 moveto subscr false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def /ix ux lx sub def /iy uy ly sub def /wx vx cx mul ix add def /wy vy cy mul iy add def LabelFont setfont x wx 0.5 mul sub y wy 0.5 mul vy sub add moveto ch show ScriptFont setfont x cx vx mul wx 0.5 mul sub add y wy 0.5 mul sub moveto subscr show end }bind def 
/PrintEdge {40 dict begin /id1 /id2 /attr 3 BindPars gsave /vertex id1 GetVertex def /x1 vertex VertexX def /y1 vertex VertexY def /vertex id2 GetVertex def /x2 vertex VertexX def /y2 vertex VertexY def ProcessEdgeAttributes id1 id2 ne {/a y2 y1 sub x2 x1 sub atan def /r y2 y1 sub dup mul x2 x1 sub dup mul add sqrt def x1 y1 translate a rotate EdgeType /normal eq {true VRad 0 VRad 0 r VRad sub 0 PrintThreePointEdge }{/sx1 VRad StartAngle cos mul def /sy1 VRad StartAngle sin mul def /sx3 r VRad EndAngle cos mul sub def /sy3 VRad EndAngle sin mul def /sxo sx1 sx3 add 2 div def /syo sy1 sy3 add 2 div def /sr sx3 sx1 sub dup mul sy3 sy1 sub dup mul add sqrt def /sh sr Deviation mul def /alpha sy3 sy1 sub sx3 sx1 sub atan def /sx2 sxo alpha sin sh mul sub def /sy2 syo alpha cos sh mul add def EdgeType /leftedge eq {false sx1 sy1 sx2 sy2 sx3 sy3 }{true sx1 sy1 neg sx2 sy2 neg sx3 sy3 neg }ifelse PrintThreePointEdge }ifelse }{x1 y1 translate StartAngle rotate /ha OpenAngle 2 div def /sx1 VRad ha cos mul def /sy1 VRad ha sin mul def /sx2 sy1 dup add Deviation mul def EdgeType /leftedge eq {false sx1 sy1 sx2 0 sx1 sy1 neg }{true sx1 sy1 neg sx2 0 sx1 sy1 }ifelse PrintThreePointEdge }ifelse grestore end }bind def 
/Edge {2 dict begin /id1 /id2 /attr 3 BindPars /e mark id1 id2 attr ] def $VertexDict id1 Name mark $VertexDict id1 Name get aload pop e ] put $EdgeDict e TableStore id1 id2 attr PrintEdge end }bind def 
/PrintVertex {10 dict begin /id /attr 2 BindPars /vertex id GetVertex def gsave ProcessVertexAttributes Visible {newpath vertex VertexX vertex VertexY VRad 0 360 arc stroke id vertex VertexX vertex VertexY PrintVertexLabel }if grestore end }bind def 
/Vertex {3 dict begin /id /x /y /attr 4 BindPars $VertexDict id Name mark id x y attr ] put id attr PrintVertex end }bind def 
/Graphics {dup $GraphicsDict exch TableStore 1 get exec }bind def 
/LineIntersection {20 dict begin line1 line2 2 BindPars line1 aload pop /ax /ay /rx /ry 4 BindPars line2 aload pop /bx /by /sx /sy 4 BindPars /nim ay bx mul ax by mul sub def nim abs 0.1 lt {null }{/f by rx sx sub mul bx ry sy sub mul sub nim div def /p0x rx ax f mul add def /p0y ry ay f mul add def mark p0x p0y ] }ifelse end }bind def 
/OrigoX -57 def 
/Fonts [[/ScriptFont /Times-Roman 12 ][/DataFont /Times-Italic 16 ][/LabelFont /Times-Italic 20 ]]bind def 
/GetVertex {$VertexDict exch Name get }bind def 
/loc 5 def 
/DataItemFont {0 get load }bind def 
/FD {4 dict begin /FDname /FDfont /FDsize 3 BindPars $GraphOperDict FDname FDfont findfont FDsize scalefont put $FontDict FDname mark FDfont FDsize ] put end }bind def 
/DataItemYskip {2 get }bind def 
/DataBox {16 dict begin /item exch def /fnt item DataItemFont def /xskip item DataItemXskip def /yskip item DataItemYskip def /str item DataItemString def fnt setfont newpath 0 0 moveto str false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def str stringwidth pop /vx exch def /vy uy ly sub def 0 vx 0.5 mul sub vx 0.5 mul VRad 2 mul add xskip mul add /lx exch def 0 vy 0.5 mul sub vy 0.5 mul VRad 2 mul add yskip mul add /ly exch def lx ly lx vx add ly vy add end }bind def 
/VRad 15 def 
/VertexY {2 get }bind def 
/OrigoY -6 def 
/BindPars {/loc exch def loc {loc index def }repeat loc {pop }repeat }bind def 
/LabelType /Normal def 
/DataItemXskip {1 get }bind def 
/InitGraph {/OrigoX /OrigoY /VRad /Fonts /LabelType 5 BindPars OrigoX OrigoY translate Fonts {aload pop FD }forall }bind def 
/DataItemString {3 get }bind def 
/VertexX {1 get }bind def 
end
/$GraphsBegin {$GraphOperDict begin /$GraphsEnteredState save def }bind def 
/$GraphsEnd {$GraphsEnteredState restore end }bind def 
$GraphsBegin
-57 -6 15 [[/ScriptFont /Times-Roman 12 ][/DataFont /Times-Italic 16 ][/LabelFont /Times-Italic 20 ]] /Normal  InitGraph
(2) 200 100 null Vertex
(4) 300 25 null Vertex
(1) 100 100 null Vertex
(3) 300 175 null Vertex
(3) (3) [[/startangle 0 ][/deviation 2 ]] Edge
(4) (4) [[/startangle 0 ][/deviation 2 ][/edgetype /rightedge ]] Edge
(2) (3) null Edge
(1) (1) [[/startangle 180 ][/deviation 2 ]] Edge
(1) (2) null Edge
(2) (4) null Edge
[[57 6 344 194 ]{}] Graphics
$GraphsEnd
 @endspecial 1805 5539 a(\(b\))-116 5730 y Fd(Figure)39
b(2.3)p Fr(:)46 b Fp(\(a\))34 b Fr(The)h(strong)g(comp)s(onen)m(ts)f
(of)g(graph)g Fn(G)g Fr(of)g(Figure)d(2.1)j(and)g Fp(\(b\))g
Fr(the)h(condensation)-116 5838 y(graph)d(induced)h(b)m(y)h(the)f
(strong)f(comp)s(onen)m(ts)h(of)g Fn(G)p Fr(.)p eop
17 4 bop 3778 -294 a Fr(17)30 18 y(Eac)m(h)34 b(acyclic)f(graph)g(has)h
(at)f(least)g(one)g(top)s(ological)d(order.)46 b(Since)33
b(a)g(condensation)h(graph)p 3564 -60 77 4 v 33 w Fn(G)f
Fr(is)g(an)-116 152 y(acyclic)h(graph)g(augmen)m(ted)g(p)s(ossibly)g
(with)g(self-lo)s(op)e(edges,)k(eac)m(h)f(condensation)g(graph)p
3343 74 V 34 w Fn(G)f Fr(also)f(has)i(a)-116 286 y(top)s(ological)29
b(order.)43 b(No)33 b(graph)f(that)g(has)h(cycles)h(of)e(more)g(than)h
(one)g(v)m(ertex)h(has)f(a)f(top)s(ological)d(order.)-116
478 y Fp(De\014nition)p Fr(.)64 b(The)34 b Fo(tr)-5 b(ansitive)35
b(r)-5 b(e)g(duction)40 b Fn(G)1600 493 y Fj(r)1666 478
y Fr(=)28 b(\()p Fn(V)5 b(;)17 b(E)1986 493 y Fj(r)2024
478 y Fr(\))33 b(of)f(a)h(graph)f Fn(G)c Fr(=)h(\()p
Fn(V)5 b(;)17 b(E)6 b Fr(\))32 b(is)h(a)f(graph)h(that)f(has)-116
612 y(the)k(same)g(transitiv)m(e)f(closure)h(as)g Fn(G)p
Fr(,)h(but)f(has)g(as)g(few)h(edges)g(as)f(p)s(ossible.)53
b(The)37 b(size)f(of)f(the)h(transitiv)m(e)-116 745 y(reduction)c(is)g
(denoted)i(b)m(y)f Fn(e)964 760 y Fj(r)1003 745 y Fr(.)43
b(The)34 b(transitiv)m(e)e(reduction)g(is)g(not)h(necessarily)g
(unique.)-116 938 y Fp(De\014nition)p Fr(.)58 b(A)30
b(\(directed)g(ro)s(oted\))g Fo(tr)-5 b(e)g(e)37 b Fn(T)43
b Fr(is)30 b(an)g(acyclic)f(graph)h(satisfying)e(the)j(follo)m(wing)c
(prop)s(erties:)-26 1146 y(1.)48 b Fn(T)f Fr(has)33 b(exactly)g(one)f
(v)m(ertex)j Fn(r)g Fr(\(called)c(the)i Fo(r)-5 b(o)g(ot)9
b Fr(\))33 b(that)g(is)f(the)h(head)g(of)f(no)g(edge.)-26
1313 y(2.)48 b(Eac)m(h)34 b(v)m(ertex)g(except)g(the)f(ro)s(ot)f(is)g
(the)h(head)g(of)f(exactly)h(one)g(edge.)-26 1480 y(3.)48
b(F)-8 b(rom)31 b(the)i(ro)s(ot)f Fn(r)j Fr(to)d(eac)m(h)i(v)m(ertex)g
Fn(v)j Fr(exists)c(a)f(unique)h(path)g Fn(r)2502 1427
y Fl(\003)2470 1480 y Fm(!)o Fn(v)t Fr(.)-116 1689 y(If)g
Fn(v)j Fr(is)d(a)f(v)m(ertex)j(in)d(a)h(tree)g Fn(T)14
b Fr(,)33 b(a)g Fo(subtr)-5 b(e)g(e)40 b Fn(T)1532 1704
y Fj(v)1606 1689 y Fr(is)32 b(the)i(maximal)29 b(subgraph)34
b(of)e Fn(T)47 b Fr(that)33 b(has)g Fm(f)p Fn(v)t Fm(g)22
b([)h Fo(Suc)-5 b(c)o Fr(\()p Fn(v)t Fr(\))-116 1822
y(as)35 b(its)f(v)m(ertex)j(set.)52 b(A)35 b(graph)f(consisting)h(of)f
(a)h(collection)e(of)h(trees)i(is)f(a)g Fo(for)-5 b(est)p
Fr(.)50 b(A)35 b(tree)h Fn(T)48 b Fr(\(a)35 b(forest)g
Fn(F)14 b Fr(\))-116 1956 y(is)39 b(a)g Fo(sp)-5 b(anning)40
b(tr)-5 b(e)g(e)47 b Fr(\(a)39 b Fo(sp)-5 b(anning)40
b(for)-5 b(est)9 b Fr(\))40 b(of)f(a)h(graph)f Fn(G)g
Fr(if)g Fn(T)53 b Fr(\()p Fn(F)14 b Fr(\))39 b(is)g(a)h(subgraph)g(of)f
Fn(G)g Fr(and)h Fn(T)53 b Fr(\()p Fn(F)14 b Fr(\))-116
2090 y(con)m(tains)32 b(all)f(the)i(v)m(ertices)h(of)e
Fn(G)p Fr(.)-116 2341 y Fp(Example)k(2.6.)d Fr(Figure)f(2.4)g(sho)m(ws)
i(one)f(spanning)f(tree)h(of)f(graph)h Fn(G)f Fr(of)g(Figure)g(2.1.)p
3195 2341 4 67 v 3199 2278 59 4 v 3199 2341 V 3257 2341
4 67 v 30 2533 a(The)i(set)g(of)f(edges)h Fn(E)h Fm(\022)29
b Fn(V)44 b Fm(\002)23 b Fn(V)55 b Fr(is)33 b(a)g(binary)f(relation.)44
b(Con)m(v)m(ersely)-8 b(,)35 b(ev)m(ery)g(binary)e(relation)e
Fn(R)k Fr(in)d(a)-116 2667 y(domain)26 b Fn(V)49 b Fr(can)29
b(b)s(e)f(seen)h(as)f(a)g(directed)g(graph)g(with)g(v)m(ertex)h(set)g
Fn(V)50 b Fr(and)28 b(edge)g(set)h Fn(R)q Fr(.)42 b(W)-8
b(e)28 b(can)g(form)m(ulate)-116 2800 y(the)33 b(transitiv)m(e)f
(closure)h(also)e(in)h(the)h(terms)g(of)f(binary)g(relations.)-116
2993 y Fp(De\014nition)p Fr(.)57 b(The)31 b Fo(tr)-5
b(ansitive)31 b(closur)-5 b(e)32 b(of)g(a)f(binary)h(r)-5
b(elation)32 b Fn(E)h Fm(\022)28 b Fn(V)38 b Fm(\002)16
b Fn(V)51 b Fr(is)29 b(a)g(relation)e Fn(E)3363 2956
y Fi(+)3450 2993 y Fm(\022)h Fn(V)37 b Fm(\002)16 b Fn(V)50
b Fr(:)-116 3126 y Fn(E)-38 3090 y Fi(+)49 3126 y Fr(=)152
3060 y Fk(S)221 3147 y Fj(n>)p Fi(0)375 3126 y Fn(E)453
3090 y Fj(n)529 3126 y Fr(where)31 b Fn(E)886 3090 y
Fi(0)953 3126 y Fr(=)d Fn(I)37 b Fr(and)30 b Fn(E)1402
3090 y Fj(n)p Fi(+1)1567 3126 y Fr(=)d Fn(E)1748 3090
y Fj(n)1811 3126 y Fm(\016)16 b Fn(E)33 b Fr(=)28 b Fn(E)22
b Fm(\016)16 b Fn(E)2324 3090 y Fj(n)2370 3126 y Fr(.)43
b(Here)30 b Fn(I)37 b Fr(is)29 b(the)h(iden)m(tit)m(y)f(relation)f(and)
-116 3260 y Fm(\016)k Fr(is)g(the)h(comp)s(osition)d(op)s(erator.)30
3452 y(W)-8 b(e)33 b(use)h(the)f(graph)f(theoretic)h(form)m(ulation)d
(except)k(when)g(w)m(e)g(describ)s(e)f(previous)g(algorithms)d(that)
-116 3586 y(are)g(based)i(on)f(the)g(relational)c(form)m(ulation.)40
b(In)31 b(these)h(relationally)c(orien)m(ted)i(algorithms,)f(the)i
(graph)f(is)-116 3719 y(usually)36 b(represen)m(ted)j(as)e(a)f(table)g
(of)g(pairs,)i(and)e(one)h(or)g(more)f(indices)g(are)h(used)h(to)e
(e\016cien)m(tly)h(access)-116 3853 y(the)c(edges)g(lea)m(ving)f(or)g
(en)m(tering)h(a)f(v)m(ertex.)-116 4045 y Fp(Example)43
b(2.7.)38 b Fr(Consider)h(the)f(example)g(graph)g Fn(G)f
Fr(=)g(\()p Fn(V)5 b(;)17 b(E)6 b Fr(\))38 b(of)f(Figure)32
b(2.1)o(.)60 b(W)-8 b(e)39 b(can)f(compute)g(the)-116
4179 y(transitiv)m(e)f(closure)g(of)g(an)m(y)i(graph)e(b)m(y)h(using)f
(only)g(its)g(simple)f(paths.)59 b(Generally)-8 b(,)37
b(the)h(longest)f(simple)-116 4313 y(path)g(in)g(a)g(graph)g(has)g(at)g
(most)g Fn(n)g Fr(edges,)j(but)d(in)g(our)g(example)g(graph)g(the)h
(longest)e(simple)g(path)h(has)-116 4446 y(\014v)m(e)d(edges.)44
b(Th)m(us,)34 b Fn(E)713 4410 y Fi(+)800 4446 y Fr(=)28
b Fn(E)g Fm([)23 b Fn(E)1171 4410 y Fi(2)1232 4446 y
Fm([)g Fn(E)1399 4410 y Fi(3)1460 4446 y Fm([)g Fn(E)1627
4410 y Fi(4)1688 4446 y Fm([)g Fn(E)1855 4410 y Fi(5)1895
4446 y Fr(.)p 1965 4446 V 1969 4383 59 4 v 1969 4446
V 2026 4446 4 67 v 640 5647 a @beginspecial 0 @llx 0
@lly 428 @urx 178 @ury 2976 @rwi @setspecial
/$GraphOperDict 200 dict def
/$VertexDict 1000 dict def
/$EdgeDict 1000 dict def
/$DataDict 1000 dict def
/$GraphicsDict 1000 dict def
/$FontDict 200 dict def
$GraphOperDict begin
/ChainRad {2.3 VRad mul }bind def 
/Gensym {GensymCounter dup 1 add /GensymCounter exch store 10 string cvs dup length 1 add string dup <67>0 exch putinterval dup 1 4 3 roll putinterval cvn }bind def 
/Chain {mark 1 index /Chain ] DataTableStore aload length dup 1 eq {pop UnitChain }{1 sub {1 index 3 1 roll ChainLink }repeat pop }ifelse }bind def 
/PrintVertexLabel {16 dict begin /id /x /y 3 BindPars LabelType /Normal eq {VertexLabelName id x y PrintSubscriptedLabel }{LabelType /Simple eq {LabelFont setfont newpath 0 0 moveto id false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def id stringwidth pop /vx exch def /vy uy ly sub def x vx 0.5 mul sub y vy 0.5 mul sub moveto id show }{}ifelse }ifelse end }bind def 
/id1 <38>def 
/CountLine {10 dict begin /id1 /id2 2 BindPars id1 GetVertex dup VertexX /x1 exch def VertexY /y1 exch def id2 GetVertex dup VertexX /x2 exch def VertexY /y2 exch def /dx x2 x1 sub def /dy y2 y1 sub def /dl dx dup mul dy dup mul add sqrt def /nx PDist dy neg dl div mul def /ny PDist dx dl div mul def mark dx dy x1 nx add y1 ny add ] end }bind def 
/ProcessVertexAttributes {0 setlinejoin 0 setlinecap /Visible true def attr type /arraytype eq {attr {/item exch def item 0 get /Visible eq {/Visible item 1 get def }{<496c6c6567616c206974656d0a>}ifelse }forall }if Visible {0.0 setcolor }{1.0 setcolor }ifelse }bind def 
/PrintEdgeHead {3 dict begin /x /y /angle 3 BindPars x y translate angle rotate newpath 0 0 moveto VRad 1.0 div VRad 3.5 div 1 index 1 index neg lineto lineto closepath fill end }bind def 
/Name {30 string cvs dup length 1 add string dup 0 <76>putinterval dup 1 4 3 roll putinterval cvn }bind def 
/ProcessEdgeAttributes {0 setlinejoin 0 setlinecap id1 id2 eq {/StartAngle 0 def /EndAngle null def /OpenAngle 90 def /Deviation 3 def /EdgeType /leftedge def }{/StartAngle 20 def /EndAngle null def /Deviation 0.1 def /EdgeType /normal def }ifelse attr type /arraytype eq {attr {/item exch def item 0 get /setdash eq {item 1 get item 2 get setdash }{item 0 get /deviation eq {/Deviation item 1 get def }{item 0 get /edgetype eq {/EdgeType item 1 get def }{item 0 get /startangle eq {/StartAngle item 1 get def }{item 0 get /endangle eq {/EndAngle item 1 get def }{item 0 get /OpenAngle eq {/OpenAngle item 1 get def }{<496c6c6567616c206974656d0a>}ifelse }ifelse }ifelse }ifelse }ifelse }ifelse }forall }if EndAngle null eq {/EndAngle StartAngle def }if }bind def 
/PrintThreePointEdge {20 dict begin /clockwise /x1 /y1 /x2 /y2 /x3 /y3 7 BindPars /nim y1 x2 x3 sub mul x1 y3 y2 sub mul add y2 x3 mul add x2 y3 mul sub 2 mul def nim 0 ne {/xos x1 dup mul y1 dup mul add y2 y3 mul add y3 y2 sub mul x2 dup mul y1 y3 sub mul add x3 dup mul y2 y1 sub mul add y1 y2 dup mul y3 dup mul sub mul add def /yos x1 dup mul y1 dup mul add x2 x3 mul add x2 x3 sub mul y2 dup mul x3 x1 sub mul add y3 dup mul x1 x2 sub mul add x1 x3 dup mul x2 dup mul sub mul add def /x xos nim div def /y yos nim div def /r x x1 sub dup mul y y1 sub dup mul add sqrt def /a1 y1 y sub x1 x sub atan def /a3 y3 y sub x3 x sub atan def newpath x y r a1 a3 clockwise {arc }{arcn }ifelse stroke /aux VRad r dup mul 4 mul VRad dup mul sub sqrt atan def x3 y3 a3 90 aux add clockwise {neg }if add PrintEdgeHead }{newpath x1 y1 moveto x3 y3 lineto stroke x3 y3 180 PrintEdgeHead }ifelse end }bind def 
/TableStore {Gensym exch put }bind def 
/ProjectPoint {10 dict begin /lin /x /y 3 BindPars lin aload pop /dx /dy /x0 /y0 4 BindPars /dl dx dup mul dy dup mul add def dy dup mul x0 mul dx dy mul y0 mul sub dx dup mul x mul add dx dy mul y mul add dl div dx dup mul y0 mul dx dy mul x0 mul sub dy dup mul y mul add dx dy mul x mul add dl div end }bind def 
/GensymCounter 7 def 
/UnitChain {gsave mark 4 ] 0 setdash 2 setlinewidth 1 setlinecap newpath GetVertex dup VertexX exch VertexY translate 0 0 ChainRad 0 360 arc stroke grestore }bind def 
/VertexData {10 dict begin /id /item 2 BindPars id GetVertex dup VertexX /x exch def VertexY /y exch def item {dup DataBox pop pop y add exch x add exch moveto dup DataItemFont setfont DataItemString show }forall mark id item /VertexData ] DataTableStore end }bind def 
/VertexLabelName <76>def 
/ChainLink {20 dict begin /id1 /id2 2 BindPars gsave mark 4 ] 0 setdash 2 setlinewidth 1 setlinecap /vertex1 id1 GetVertex def /vertex2 id2 GetVertex def /x1 vertex1 VertexX def /y1 vertex1 VertexY def /x2 vertex2 VertexX def /y2 vertex2 VertexY def /dist x2 x1 sub dup mul y2 y1 sub dup mul add sqrt def x1 y1 translate y2 y1 sub x2 x1 sub atan rotate newpath 0 0 ChainRad sub moveto dist 0 ChainRad -90 90 arc 0 0 ChainRad 90 270 arc closepath stroke grestore end }bind def 
/DataTableStore {$DataDict exch TableStore }bind def 
/ClosedPolyLine {20 dict begin /ids exch def /idcount ids length def /PDist VRad 2.5 mul def idcount 1 eq {newpath ids 0 get GetVertex dup VertexX exch VertexY PDist 0 360 arc stroke }{newpath 0 1 idcount 1 sub {/i exch def /id1 ids i 1 sub idcount add idcount mod get def /id2 ids i get def /id3 ids i 1 add idcount mod get def /line1 id1 id2 CountLine def /line2 id2 id3 CountLine def /p0 line1 line2 LineIntersection def p0 null eq {id2 GetVertex dup VertexX exch VertexY PDist line1 1 get line1 0 get atan 90 add dup 180 sub arcn }{i 0 eq {line1 id1 GetVertex dup VertexX exch VertexY ProjectPoint /oy1 exch def /ox1 exch def line1 id2 GetVertex dup VertexX exch VertexY ProjectPoint /oy2 exch def /ox2 exch def ox1 ox2 add 2 div oy1 oy2 add 2 div moveto }if p0 0 get p0 1 get line2 id2 GetVertex dup VertexX exch VertexY ProjectPoint /oy1 exch def /ox1 exch def line2 id3 GetVertex dup VertexX exch VertexY ProjectPoint /oy2 exch def /ox2 exch def ox1 ox2 add 2 div oy1 oy2 add 2 div PDist arct }ifelse }for closepath stroke }ifelse end }bind def 
/PrintSubscriptedLabel {10 dict begin /ch /subscr /x /y 4 BindPars /cx 0.85 def /cy 0.85 def LabelFont setfont newpath 0 0 moveto ch false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def /vx ux lx sub def /vy uy ly sub def ScriptFont setfont newpath 0 0 moveto subscr false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def /ix ux lx sub def /iy uy ly sub def /wx vx cx mul ix add def /wy vy cy mul iy add def LabelFont setfont x wx 0.5 mul sub y wy 0.5 mul vy sub add moveto ch show ScriptFont setfont x cx vx mul wx 0.5 mul sub add y wy 0.5 mul sub moveto subscr show end }bind def 
/id2 <36>def 
/PrintEdge {40 dict begin /id1 /id2 /attr 3 BindPars gsave /vertex id1 GetVertex def /x1 vertex VertexX def /y1 vertex VertexY def /vertex id2 GetVertex def /x2 vertex VertexX def /y2 vertex VertexY def ProcessEdgeAttributes id1 id2 ne {/a y2 y1 sub x2 x1 sub atan def /r y2 y1 sub dup mul x2 x1 sub dup mul add sqrt def x1 y1 translate a rotate EdgeType /normal eq {true VRad 0 VRad 0 r VRad sub 0 PrintThreePointEdge }{/sx1 VRad StartAngle cos mul def /sy1 VRad StartAngle sin mul def /sx3 r VRad EndAngle cos mul sub def /sy3 VRad EndAngle sin mul def /sxo sx1 sx3 add 2 div def /syo sy1 sy3 add 2 div def /sr sx3 sx1 sub dup mul sy3 sy1 sub dup mul add sqrt def /sh sr Deviation mul def /alpha sy3 sy1 sub sx3 sx1 sub atan def /sx2 sxo alpha sin sh mul sub def /sy2 syo alpha cos sh mul add def EdgeType /leftedge eq {false sx1 sy1 sx2 sy2 sx3 sy3 }{true sx1 sy1 neg sx2 sy2 neg sx3 sy3 neg }ifelse PrintThreePointEdge }ifelse }{x1 y1 translate StartAngle rotate /ha OpenAngle 2 div def /sx1 VRad ha cos mul def /sy1 VRad ha sin mul def /sx2 sy1 dup add Deviation mul def EdgeType /leftedge eq {false sx1 sy1 sx2 0 sx1 sy1 neg }{true sx1 sy1 neg sx2 0 sx1 sy1 }ifelse PrintThreePointEdge }ifelse grestore end }bind def 
/Edge {/id1 /id2 /attrs 3 BindPars id1 <31>eq id2 <32>eq and id1 <32>eq id2 <33>eq and or id1 <32>eq id2 <34>eq and or id1 <34>eq id2 <35>eq and or id1 <34>eq id2 <36>eq and or id1 <35>eq id2 <37>eq and or id1 <36>eq id2 <38>eq and or {id1 id2 null RealEdge }if }bind def 
/PrintVertex {10 dict begin /id /attr 2 BindPars /vertex id GetVertex def gsave ProcessVertexAttributes Visible {newpath vertex VertexX vertex VertexY VRad 0 360 arc stroke id vertex VertexX vertex VertexY PrintVertexLabel }if grestore end }bind def 
/Vertex {3 dict begin /id /x /y /attr 4 BindPars $VertexDict id Name mark id x y attr ] put id attr PrintVertex end }bind def 
/Graphics {dup $GraphicsDict exch TableStore 1 get exec }bind def 
/LineIntersection {20 dict begin line1 line2 2 BindPars line1 aload pop /ax /ay /rx /ry 4 BindPars line2 aload pop /bx /by /sx /sy 4 BindPars /nim ay bx mul ax by mul sub def nim abs 0.1 lt {null }{/f by rx sx sub mul bx ry sy sub mul sub nim div def /p0x rx ax f mul add def /p0y ry ay f mul add def mark p0x p0y ] }ifelse end }bind def 
/OrigoX -86.0 def 
/Fonts [[/ScriptFont /Times-Roman 12 ][/DataFont /Times-Italic 16 ][/LabelFont /Times-Italic 20 ]]bind def 
/GetVertex {$VertexDict exch Name get }bind def 
/loc 3 def 
/RealEdge {2 dict begin /id1 /id2 /attr 3 BindPars /e mark id1 id2 attr ] def $VertexDict id1 Name mark $VertexDict id1 Name get aload pop e ] put $EdgeDict e TableStore id1 id2 attr PrintEdge end }bind def 
/DataItemFont {0 get load }bind def 
/FD {4 dict begin /FDname /FDfont /FDsize 3 BindPars $GraphOperDict FDname FDfont findfont FDsize scalefont put $FontDict FDname mark FDfont FDsize ] put end }bind def 
/DataItemYskip {2 get }bind def 
/DataBox {16 dict begin /item exch def /fnt item DataItemFont def /xskip item DataItemXskip def /yskip item DataItemYskip def /str item DataItemString def fnt setfont newpath 0 0 moveto str false charpath pathbbox /uy exch def /ux exch def /ly exch def /lx exch def str stringwidth pop /vx exch def /vy uy ly sub def 0 vx 0.5 mul sub vx 0.5 mul VRad 2 mul add xskip mul add /lx exch def 0 vy 0.5 mul sub vy 0.5 mul VRad 2 mul add yskip mul add /ly exch def lx ly lx vx add ly vy add end }bind def 
/VRad 13 def 
/VertexY {2 get }bind def 
/OrigoY -111.0 def 
/BindPars {/loc exch def loc {loc index def }repeat loc {pop }repeat }bind def 
/LabelType /Normal def 
/attrs [[/deviation 0.05 ][/edgetype /rightedge ]]bind def 
/DataItemXskip {1 get }bind def 
/InitGraph {/OrigoX /OrigoY /VRad /Fonts /LabelType 5 BindPars OrigoX OrigoY translate Fonts {aload pop FD }forall }bind def 
/DataItemString {3 get }bind def 
/VertexX {1 get }bind def 
end
/$GraphsBegin {$GraphOperDict begin /$GraphsEnteredState save def }bind def 
/$GraphsEnd {$GraphsEnteredState restore end }bind def 
$GraphsBegin
-86.0 -111.0 13 [[/ScriptFont /Times-Roman 12 ][/DataFont /Times-Italic 16 ][/LabelFont /Times-Italic 20 ]] /Normal  InitGraph
(3) 200 125 null Vertex
(5) 400 275 null Vertex
(7) 500 275 null Vertex
(2) 200 275 null Vertex
(4) 300 200 null Vertex
(6) 400 125 null Vertex
(8) 500 125 null Vertex
(1) 100 200 null Vertex
(1) (2) null Edge
(2) (4) null Edge
(4) (6) null Edge
(6) (8) null Edge
(2) (3) null Edge
(4) (5) null Edge
(5) (7) null Edge
$GraphsEnd
 @endspecial 694 5838 a Fd(Figure)37 b(2.4)p Fr(:)43
b(A)33 b(spanning)f(tree)i(of)e(graph)g Fn(G)h Fr(of)f(Figure)f(2.1.)p
eop
18 5 bop -116 -294 a Fr(18)30 18 y(In)33 b(the)g(analysis)f(of)g(the)g
(algorithms,)e(w)m(e)k(assume)f(a)f(random)g(access)i(mac)m(hine)e
(\(RAM\))g(mo)s(del)f([10].)-116 152 y(W)-8 b(e)34 b(use)g(the)g(Big)f
(Oh)h(\()p Fn(O)s Fr(\),)f(the)h(Big)e(Omega)h(\(\012\),)h(and)g(the)g
(Big)f(Theta)h(\(\002\))f(notations)g([46])g(to)h(discuss)-116
286 y(the)e(gro)m(wth)h(rate)f(of)g(a)f(function)h(that)g(describ)s(es)
h(the)g(execution)g(time)d(or)i(the)h(memory)e(space)i(required)-116
419 y(b)m(y)g(a)g(program.)42 b(They)34 b(are)e(de\014ned)i(as)f(follo)
m(ws:)-116 638 y Fp(De\014nition)p Fr(.)128 899 y Fn(f)11
b Fr(\()p Fn(n)p Fr(\))27 b(=)h Fn(O)s Fr(\()p Fn(g)t
Fr(\()p Fn(n)p Fr(\)\))e Fm(,)h Fr(\()p Fm(9)p Fn(c;)17
b(n)1181 914 y Fi(0)1221 899 y Fr(\()p Fn(c)p Fr(\)\)\()p
Fm(8)p Fn(n)p Fr(\)\()p Fn(n)28 b Fm(\025)g Fn(n)1853
914 y Fi(0)1920 899 y Fm(\))g Fn(f)11 b Fr(\()p Fn(n)p
Fr(\))27 b Fm(\024)h Fn(cg)t Fr(\()p Fn(n)p Fr(\)\))128
1160 y Fn(f)11 b Fr(\()p Fn(n)p Fr(\))27 b(=)h(\012\()p
Fn(g)t Fr(\()p Fn(n)p Fr(\)\))f Fm(,)g Fr(\()p Fm(9)p
Fn(c;)17 b(n)1174 1175 y Fi(0)1214 1160 y Fr(\()p Fn(c)p
Fr(\)\)\()p Fm(8)p Fn(n)p Fr(\)\()p Fn(n)28 b Fm(\025)g
Fn(n)1846 1175 y Fi(0)1914 1160 y Fm(\))f Fn(f)11 b Fr(\()p
Fn(n)p Fr(\))27 b Fm(\025)i Fn(cg)t Fr(\()p Fn(n)p Fr(\)\))128
1420 y Fn(f)11 b Fr(\()p Fn(n)p Fr(\))27 b(=)h(\002\()p
Fn(g)t Fr(\()p Fn(n)p Fr(\)\))e Fm(,)i Fr(\()p Fm(9)p
Fn(c)1078 1435 y Fi(1)1117 1420 y Fn(;)17 b(c)1203 1435
y Fi(2)1243 1420 y Fn(;)g(n)1345 1435 y Fi(0)1384 1420
y Fr(\()p Fn(c)1464 1435 y Fi(1)1503 1420 y Fn(;)g(c)1589
1435 y Fi(2)1628 1420 y Fr(\)\)\()p Fm(8)p Fn(n)p Fr(\)\()p
Fn(n)29 b Fm(\025)f Fn(n)2181 1435 y Fi(0)2248 1420 y
Fm(\))f Fn(c)2417 1435 y Fi(1)2457 1420 y Fn(g)t Fr(\()p
Fn(n)p Fr(\))g Fm(\024)h Fn(f)11 b Fr(\()p Fn(n)p Fr(\))28
b Fm(\024)g Fn(c)3142 1435 y Fi(2)3181 1420 y Fn(g)t
Fr(\()p Fn(n)p Fr(\)\))-116 1776 y Fq(2.2)160 b(De\014ning)53
b(the)g(problem)-116 2009 y Fr(In)41 b(the)h Fo(tr)-5
b(ansitive)43 b(closur)-5 b(e)42 b(pr)-5 b(oblem)p Fr(,)43
b(w)m(e)f(are)f(giv)m(en)h(a)f(directed)g(graph)g Fn(G)i
Fr(=)f(\()p Fn(V)5 b(;)17 b(E)6 b Fr(\))41 b(and)h(w)m(e)g(should)-116
2143 y(compute)e(its)g(transitiv)m(e)f(closure)i Fn(G)1283
2106 y Fi(+)1383 2143 y Fr(=)f(\()p Fn(V)5 b(;)17 b(E)1721
2106 y Fi(+)1780 2143 y Fr(\).)66 b(This)41 b(problem)e(is)h(called)f
(the)h Fo(al)5 b(l-p)-5 b(airs)41 b(tr)-5 b(ansitive)-116
2276 y(closur)g(e)34 b(pr)-5 b(oblem)39 b Fr([130])32
b(or)h(the)g Fo(ful)5 b(l)34 b(tr)-5 b(ansitive)35 b(closur)-5
b(e)35 b(pr)-5 b(oblem)p Fr(.)30 2410 y(The)34 b(input)e(of)g(the)g
(transitiv)m(e)g(closure)h(problem)e(ma)m(y)i(b)s(e)f(in)g(di\013eren)m
(t)h(forms.)42 b(If)33 b(not)f(stated)h(other-)-116 2544
y(wise,)h(w)m(e)h(assume)f(that)f(the)h(input)g(graph)f(is)g(represen)m
(ted)j(in)d(the)h(adjacency)h(list)d(form.)46 b(Note)33
b(that)h(w)m(e)-116 2677 y(require)k(no)f(data)g(structure)i(that)e
(con)m(tains)h(the)g(v)m(ertices)g(adjacen)m(t)h(to)e(a)g(v)m(ertex)i
Fn(v)t Fr(,)g(only)e(the)h(v)m(ertices)-116 2811 y(adjacen)m(t)33
b(from)e Fn(v)t Fr(,)i(nor)f(do)h(w)m(e)g(require)g(an)m(y)g(sp)s
(ecial)f(ordering)g(of)g(the)h(adjacency)h(lists.)30
2945 y(Also)41 b(the)i(output)f(of)f(the)h(computation)e(ma)m(y)i(b)s
(e)g(in)f(di\013eren)m(t)h(forms.)70 b(If)42 b(not)g(stated)g
(otherwise,)-116 3079 y(w)m(e)g(assume)f(that)f(the)h(output)g(of)g
(the)g(transitiv)m(e)f(closure)h(problem)e(is)h(giv)m(en)h(as)g
(successor)i(lists)d(that)-116 3212 y(represen)m(t)34
b(the)f(successor)i(sets)f(of)e(the)h(v)m(ertices.)-116
3520 y Fc(2.2.1)136 b(Related)46 b(problems)-116 3719
y Fr(W)-8 b(e)35 b(list)f(b)s(elo)m(w)h(problems)f(that)h(are)g
(closely)g(related)g(to)g(the)g(transitiv)m(e)g(closure)g(problem.)50
b(In)36 b(the)f(rest)-116 3853 y(of)d(the)h(thesis,)g(w)m(e)h(only)e
(study)i(the)f(all-pairs)c(transitiv)m(e)j(closure)h(problem.)30
3987 y(In)38 b(the)f Fo(r)-5 b(e\015exive)39 b(tr)-5
b(ansitive)39 b(closur)-5 b(e)39 b(pr)-5 b(oblem)p Fr(,)37
b(w)m(e)h(are)g(giv)m(en)f(a)g(directed)h(graph)f Fn(G)e
Fr(=)h(\()p Fn(V)5 b(;)17 b(E)6 b Fr(\))37 b(and)-116
4120 y(w)m(e)e(should)e(compute)h(its)f(re\015exiv)m(e)i(transitiv)m(e)
e(closure.)48 b(With)33 b(only)g(sligh)m(t)f(mo)s(di\014cations)g(a)h
(transitiv)m(e)-116 4254 y(closure)f(algorithm)e(can)j(b)s(e)f(applied)
g(to)g(the)h(re\015exiv)m(e)h(transitiv)m(e)e(closure)h(problem)e(and)i
(vice)g(v)m(ersa.)30 4388 y(In)24 b(the)h Fo(single-sour)-5
b(c)g(e)26 b(tr)-5 b(ansitive)27 b(closur)-5 b(e)26 b(pr)-5
b(oblem)p Fr(,)25 b(w)m(e)g(are)f(giv)m(en)g(a)g(graph)g
Fn(G)k Fr(=)f(\()p Fn(V)5 b(;)17 b(E)6 b Fr(\))24 b(and)g(a)g(v)m
(ertex)-116 4522 y Fn(x)36 b Fr(of)e Fn(V)22 b Fr(,)36
b(whose)h(successors)h(w)m(e)e(should)g(compute.)52 b(This)35
b(problem)f(can)i(b)s(e)g(solv)m(ed)g(b)m(y)g(a)f(simple)f(graph)-116
4655 y(searc)m(h)39 b(algorithm)34 b(suc)m(h)39 b(as)f(depth-\014rst)h
(or)e(breadth-\014rst)i(searc)m(h.)60 b(W)-8 b(e)38 b(start)g(the)g
(searc)m(h)h(at)e(v)m(ertex)i Fn(x)-116 4789 y Fr(and)31
b(collect)f(eac)m(h)i(v)m(ertex)h(that)e(the)h(searc)m(h)g(reac)m(hes)h
(in)m(to)d(the)i(result)f(set)h Fo(Suc)-5 b(c)p Fr(\()p
Fn(x)p Fr(\).)43 b(In)31 b(the)h Fo(multi-sour)-5 b(c)g(e)-116
4922 y(tr)g(ansitive)36 b(closur)-5 b(e)36 b(pr)-5 b(oblem)p
Fr(,)34 b(w)m(e)h(are)g(giv)m(en)f(a)g(graph)g Fn(G)d
Fr(=)g(\()p Fn(V)5 b(;)17 b(E)6 b Fr(\))34 b(and)g(a)g(subset)i
Fn(X)j Fm(\022)31 b Fn(V)21 b Fr(.)49 b(W)-8 b(e)35 b(should)-116
5056 y(compute)f(the)g(successors)j(of)d(the)g(v)m(ertices)h(in)f
Fn(X)8 b Fr(.)47 b(This)35 b(problem)d(can)j(further)f(b)s(e)g(divided)
g(in)m(to)f Fo(str)-5 b(ong)-116 5190 y Fr(and)33 b Fo(we)-5
b(ak)35 b(multi-sour)-5 b(c)g(e)35 b(tr)-5 b(ansitive)35
b(closur)-5 b(e)35 b(pr)-5 b(oblems)p Fr(.)44 b(In)34
b(the)f(strong)g(problem,)g(w)m(e)h(should)f(compute)-116
5323 y(its)c(o)m(wn)h(successor)i(set)e(for)f(eac)m(h)i(v)m(ertex)g(of)
e Fn(X)8 b Fr(.)43 b(In)30 b(the)g(w)m(eak)h(problem,)e(w)m(e)h(should)
g(compute)f(the)h(union)-116 5457 y(of)42 b(the)h(successor)i(sets)e
(of)f(the)h(v)m(ertices)h(in)e Fn(X)8 b Fr(.)73 b(Lik)m(e)43
b(the)g(single-source)f(problem,)i(the)f(w)m(eak)g(m)m(ulti-)-116
5591 y(source)36 b(problem)e(can)h(b)s(e)g(solv)m(ed)h(b)m(y)f(a)g
(graph)g(searc)m(h)h(algorithm.)48 b(The)36 b(strong)f(m)m(ulti-source)
e(problem)-116 5724 y(could)38 b(b)s(e)g(solv)m(ed)h(b)m(y)h(\014rst)f
(computing)e(the)i(transitiv)m(e)f(closure)g(of)g(the)h(whole)f(input)g
(graph)h(and)f(then)-116 5858 y(selecting)44 b(the)h(appropriate)f
(successor)j(sets,)i(but)c(computing)e(directly)h(the)h(m)m
(ulti-source)e(transitiv)m(e)p eop
19 6 bop 3778 -294 a Fr(19)-116 18 y(closure)40 b(is)f(apparen)m(tly)h
(more)f(e\016cien)m(t.)66 b(Single-source)39 b(and)h(m)m(ulti-source)e
(problems)h(are)h(sometimes)-116 152 y(called)31 b Fo(p)-5
b(artial)35 b(tr)-5 b(ansitive)34 b(closur)-5 b(e)35
b(pr)-5 b(oblems)40 b Fr(as)32 b(opp)s(osed)i(to)e(the)h(full)d
(transitiv)m(e)j(closure)f(problem.)30 286 y(The)k(transitiv)m(e)f
(closure)g(problem)f(is)h(an)g(example)g(of)f(a)h Fo(close)-5
b(d)36 b(semiring)h(pr)-5 b(oblem)p Fr(.)50 b(Closed)35
b(semir-)-116 420 y(ings)40 b(are)g(algebraic)f(structures)j(that)e
(pro)m(vide)g(a)g(uni\014ed)h(approac)m(h)f(to)g(sev)m(eral)h
(seemingly)f(unrelated)-116 554 y(problems)h(of)g(computer)h(science)h
(and)f(mathematics.)70 b(Examples)41 b(of)h(closed)g(semiring)e
(problems)h(are)-116 687 y(graph)e(theoretic)h(path)f(problems,)i(suc)m
(h)g(as)f(computing)e(the)i(shortest)h(or)e(the)h(most)f(reliable)f
(path)i(in)-116 821 y(a)e(graph,)j(data)d(\015o)m(w)i(analysis)e
(problems)g(in)g(compiler)f(tec)m(hnique,)42 b(and)d(in)m(v)m(erting)g
(real)f(matrices)g(and)-116 955 y(solving)i(systems)j(of)e(linear)f
(equations)i(in)f(mathematics)f([1,)h(10,)h(85)o(,)g(119)o(].)71
b(Similar)38 b(algorithms)h(can)-116 1088 y(b)s(e)f(used)h(to)e(solv)m
(e)i(all)c(closed)j(semiring)e(problems,)j(but)f(algorithms)d(that)j
(are)g(sp)s(ecially)e(designed)i(for)-116 1222 y(particular)f(t)m(yp)s
(es)k(of)e(semirings)e(are)j(often)f(more)f(e\016cien)m(t.)64
b(Therefore,)43 b(w)m(e)d(do)f(not)g(study)h(transitiv)m(e)-116
1355 y(closure)32 b(as)h(a)g(closed)f(semiring)f(problem.)30
1490 y(Other)42 b(generalizations)d(of)i(the)h(transitiv)m(e)f(closure)
h(problem)e(ha)m(v)m(e)j(b)s(een)f(studied)g(in)e(the)i(area)f(of)-116
1624 y(databases,)33 b(e.g.,)g([3,)f(30,)g(103)o(,)h(113)o(].)44
b(T)m(ypically)-8 b(,)31 b(these)j(generalizations)c(extend)k(the)f
(transitiv)m(e)f(closure)-116 1757 y(to)g Fn(n)p Fr(-ary)g(relations)g
(and)g(allo)m(w)f(path)i(computations,)f(selections,)g(and)h
(aggregation)e(of)h(information.)-116 2115 y Fq(2.3)160
b(Previous)54 b(w)l(ork)-116 2349 y Fr(In)33 b(this)g(section,)h(w)m(e)
h(describ)s(e)e(the)h(most)f(imp)s(ortan)m(t)e(transitiv)m(e)i(closure)
h(algorithms)c(presen)m(ted)36 b(in)c(the)-116 2483 y(literature.)39
b(The)26 b(descriptions)f(are)f(compact;)j(for)e(more)f(details)f(the)i
(reader)h(should)e(consult)h(the)g(original)-116 2617
y(presen)m(tations.)44 b(W)-8 b(e)33 b(also)f(describ)s(e)h(previous)g
(metho)s(ds)g(for)f(represen)m(ting)h(the)g(transitiv)m(e)f(closure.)
-116 2927 y Fc(2.3.1)136 b(W)-11 b(arshall's)46 b(algorithm)-116
3127 y Fr(The)34 b(b)s(est-kno)m(wn)i(transitiv)m(e)d(closure)h
(algorithm)c(is)j(W)-8 b(arshall's)33 b(algorithm)e([129)o(],)j(whic)m
(h)g(is)g(presen)m(ted)-116 3260 y(in)28 b(man)m(y)h(textb)s(o)s(oks,)i
(e.g.,)f(in)e([10,)h(11,)g(107)o(].)42 b(Lehmann)29 b([85])g(p)s(oin)m
(ts)g(out)g(that)g(this)f(algorithm)e(w)m(as)k(\014rst)-116
3394 y(describ)s(ed)j(b)m(y)h(Ro)m(y)e([104].)30 3528
y(The)39 b(idea)f(in)f(W)-8 b(arshall's)37 b(algorithm)e(is)j(the)h
(follo)m(wing.)57 b(If)38 b(the)h(graph)f(con)m(tains)g(paths)h
Fn(v)3541 3475 y Fl(\003)3509 3528 y Fm(!)o Fn(w)i Fr(and)-116
3662 y Fn(w)-12 3609 y Fl(\003)-43 3662 y Fm(!)o Fn(u)35
b Fr(whose)j(in)m(termediate)d(v)m(ertices)i(come)f(from)e(a)i(sp)s
(eci\014c)h(set)g Fn(S)6 b Fr(,)37 b(then)f(the)h(graph)f(also)f(con)m
(tains)h(a)-116 3796 y(path)29 b Fn(v)190 3743 y Fl(\003)159
3796 y Fm(!)o Fn(u)f Fr(suc)m(h)i(that)f(its)f(in)m(termediate)f(v)m
(ertices)j(come)f(from)e(the)i(set)h Fn(S)20 b Fm([)14
b(f)p Fn(w)s Fm(g)p Fr(.)41 b(W)-8 b(arshall's)28 b(algorithm)-116
3929 y(iterates)36 b(from)g(1)g(to)g Fn(n)h Fr(and)g(in)f(the)h
Fn(k)s Fr(th)g(iteration)d(studies)k(paths)f(whose)h(in)m(termediate)d
(v)m(ertices)j(come)-116 4063 y(from)31 b(the)i(set)g
Fm(f)p Fn(v)531 4078 y Fi(1)571 4063 y Fn(;)17 b(:)g(:)g(:)f(;)h(v)837
4078 y Fj(k)r Fl(\000)p Fi(1)969 4063 y Fm(g)p Fr(.)30
4197 y(The)25 b(algorithm)c(is)j(presen)m(ted)j(in)c(Figure)32
b(2.5)o(.)41 b(The)25 b(input)f(to)g(the)h(algorithm)c(is)j(an)g
(adjacency)h(matrix)-116 4331 y Fn(A)33 b Fr(represen)m(ting)i(the)f
(input)f(graph)g Fn(G)p Fr(.)46 b(The)35 b(algorithm)30
b(transforms)j Fn(A)h Fr(in)m(to)f(an)g(adjacency)i(matrix)d
Fn(A)3817 4295 y Fi(+)-116 4465 y Fr(represen)m(ting)h(the)g(output)g
(graph)g Fn(G)1276 4429 y Fi(+)1335 4465 y Fr(.)30 4599
y(The)28 b(w)m(orst-case)g(execution)f(time)f(of)g(W)-8
b(arshall's)26 b(algorithm)d(is)k Fn(O)s Fr(\()p Fn(n)2613
4563 y Fi(3)2652 4599 y Fr(\))f(and)h(the)g(b)s(est-case)h(execution)
-116 4733 y(time)20 b(is)i(\012\()p Fn(n)349 4697 y Fi(2)389
4733 y Fr(\).)40 b(This)22 b(implies)e(that)i(W)-8 b(arshall's)21
b(algorithm)e(is)j(not)f(economical)g(for)g(a)h(sparse)h(input)f
(graph.)30 4867 y(W)-8 b(arshall's)32 b(algorithm)e(examines)j(the)h
(matrix)d(p)s(osition)h Fn(A)p Fr([)p Fn(i;)17 b(k)s
Fr(])33 b(column-b)m(y-column,)e(but)j(the)f(ma-)-116
5001 y(trix)42 b(p)s(ositions)g Fn(A)p Fr([)p Fn(i;)17
b(j)6 b Fr(])43 b(and)h Fn(A)p Fr([)p Fn(k)s(;)17 b(j)6
b Fr(])43 b(ro)m(w-b)m(y-ro)m(w.)76 b(W)-8 b(arren)43
b([128])g(noticed)g(that)g(w)m(e)h(can)f(c)m(hange)h(the)-116
5281 y Fh(\(1\))218 b Fb(for)61 b Ff(k)33 b Fh(:=)61
b(1)31 b Fb(to)60 b Ff(n)30 b Fb(do)-116 5407 y Fh(\(2\))385
b Fb(for)61 b Ff(i)30 b Fh(:=)61 b(1)31 b Fb(to)60 b
Ff(n)30 b Fb(do)-116 5532 y Fh(\(3\))551 b Fb(if)61 b
Ff(i)26 b Fe(6)p Fh(=)f Ff(k)33 b Fb(and)61 b Ff(A)p
Fh([)p Ff(i;)15 b(k)s Fh(])32 b Fb(then)-116 5657 y Fh(\(4\))718
b Fb(for)61 b Ff(j)36 b Fh(:=)60 b(1)31 b Fb(to)61 b
Ff(n)30 b Fb(do)61 b Ff(A)p Fh([)p Ff(i;)15 b(j)5 b Fh(])32
b(:=)61 b Ff(A)p Fh([)p Ff(i;)15 b(j)5 b Fh(])32 b Fb(or)61
b Ff(A)p Fh([)p Ff(k)s(;)15 b(j)5 b Fh(];)1142 5838 y
Fd(Figure)37 b(2.5)p Fr(:)43 b(W)-8 b(arshall's)32 b(algorithm)p
eop
20 7 bop -116 -294 a Fr(20)-116 6 y Fh(\(1\))218 b Fb(for)61
b Ff(i)31 b Fh(:=)60 b(2)31 b Fb(to)60 b Ff(n)30 b Fb(do)-116
132 y Fh(\(2\))385 b Fb(for)61 b Ff(k)33 b Fh(:=)61 b(1)30
b Fb(to)61 b Ff(i)21 b Fe(\000)e Fh(1)31 b Fb(do)-116
257 y Fh(\(3\))551 b Fb(if)61 b Ff(A)p Fh([)p Ff(i;)15
b(k)s Fh(])32 b Fb(then)-116 382 y Fh(\(4\))718 b Fb(for)61
b Ff(j)36 b Fh(:=)60 b(1)31 b Fb(to)61 b Ff(n)30 b Fb(do)61
b Ff(A)p Fh([)p Ff(i;)15 b(j)5 b Fh(])32 b(:=)61 b Ff(A)p
Fh([)p Ff(i;)15 b(j)5 b Fh(])32 b Fb(or)61 b Ff(A)p Fh([)p
Ff(k)s(;)15 b(j)5 b Fh(];)-116 508 y(\(5\))218 b Fb(for)61
b Ff(i)31 b Fh(:=)60 b(1)31 b Fb(to)60 b Ff(n)20 b Fe(\000)g
Fh(1)31 b Fb(do)-116 633 y Fh(\(6\))385 b Fb(for)61 b
Ff(k)33 b Fh(:=)61 b Ff(i)20 b Fh(+)g(1)31 b Fb(to)60
b Ff(n)30 b Fb(do)-116 758 y Fh(\(7\))551 b Fb(if)61
b Ff(A)p Fh([)p Ff(i;)15 b(k)s Fh(])32 b Fb(then)-116
884 y Fh(\(8\))718 b Fb(for)61 b Ff(j)36 b Fh(:=)60 b(1)31
b Fb(to)61 b Ff(n)30 b Fb(do)61 b Ff(A)p Fh([)p Ff(i;)15
b(j)5 b Fh(])32 b(:=)61 b Ff(A)p Fh([)p Ff(i;)15 b(j)5
b Fh(])32 b Fb(or)61 b Ff(A)p Fh([)p Ff(k)s(;)15 b(j)5
b Fh(];)1172 1190 y Fd(Figure)37 b(2.6)p Fr(:)44 b(W)-8
b(arren's)33 b(algorithm)-116 1457 y(algorithm)j(to)j(examine)h(also)e
(the)i(p)s(osition)e Fn(A)p Fr([)p Fn(i;)17 b(k)s Fr(])40
b(ro)m(w-b)m(y-ro)m(w)g(if)f(w)m(e)i(split)d(the)i(algorithm)c(in)m(to)
j(t)m(w)m(o)-116 1591 y(passes.)k(The)29 b(\014rst)f(pass)h(tests)f
(the)g(p)s(ositions)f(b)s(elo)m(w)g(the)h(main)e(diagonal)f(of)j(the)g
(matrix)e(and)h(the)i(second)-116 1725 y(tests)k(the)g(p)s(ositions)f
(ab)s(o)m(v)m(e)h(the)g(main)e(diagonal.)41 b(W)-8 b(e)33
b(get)g(the)g(algorithm)c(of)j(Figure)g(2.6)o(.)30 1858
y(The)45 b(w)m(orst-case)g(and)f(the)g(b)s(est-case)h(execution)f
(times)f(of)g(W)-8 b(arren's)45 b(algorithm)40 b(are)k
Fn(O)s Fr(\()p Fn(n)3598 1822 y Fi(3)3637 1858 y Fr(\))g(and)-116
1992 y(\012\()p Fn(n)50 1956 y Fi(2)90 1992 y Fr(\),)33
b(just)h(lik)m(e)e(in)g(W)-8 b(arshall's)32 b(algorithm.)42
b(Both)33 b(algorithms)e(examine)i(and)g(set)h(the)f(same)g(p)s
(ositions)-116 2125 y(of)f(the)h(input)f(matrix,)f(but)i(in)f(a)g
(di\013eren)m(t)h(order.)30 2259 y(In)e(the)g(n)m(um)m(b)s(er)g(of)f
(page)h(faults)f(generated,)i(W)-8 b(arren's)32 b(algorithm)27
b(is)j(b)s(etter.)43 b(W)-8 b(arren)31 b(sho)m(w)m(ed)i(that)-116
2393 y(if)h(the)i(adjacency)g(matrix)e(of)h(a)g(sparse)i(graph)e(do)s
(es)h(not)f(\014t)h(in)m(to)e(the)i(main)e(memory)g(and)i(if)e(the)i
(LR)m(U)-116 2526 y(\(least)41 b(recen)m(tly)h(used\))g(page)g
(replacemen)m(t)f(p)s(olicy)f([117])h(is)g(used,)k(then)d(his)f
(algorithm)d(causes)43 b(few)m(er)-116 2660 y(page)32
b(faults)g(than)h(W)-8 b(arshall's)31 b(b)m(y)j(a)e(factor)g(that)h(is)
f(b)s(et)m(w)m(een)i(one)f(and)g Fn(n=)p Fr(2.)30 2794
y(W)-8 b(arshall's)32 b(and)g(W)-8 b(arren's)34 b(algorithms)29
b(can)k(easily)f(b)s(e)h(mo)s(di\014ed)e(to)h(solv)m(e)h(the)g
(re\015exiv)m(e)h(transitiv)m(e)-116 2927 y(closure)39
b(problem)e(or)i(an)m(y)g(other)g(closed)g(semiring)e(problem.)62
b(Lehmann)38 b([85])h(sho)m(ws)h(that)f(W)-8 b(arshall's)-116
3061 y(transitiv)m(e)42 b(closure)g(algorithm,)g(Flo)m(yd's)h
(algorithm)c(for)j(minim)m(um-cost)e(paths)j([42)o(],)i(Kleene's)f(pro)
s(of)-116 3194 y(that)30 b(ev)m(ery)i(regular)d(language)h(can)g(b)s(e)
h(de\014ned)h(b)m(y)f(a)f(regular)f(expression)j([80],)f(and)f(the)h
(Gauss-Jordan)-116 3328 y(metho)s(d)46 b(for)g(in)m(v)m(erting)g(real)f
(matrices)h(are)g(di\013eren)m(t)h(in)m(terpretations)f(of)g(the)h
(same)f(basic)g(program)-116 3462 y(sc)m(heme.)-116 3762
y Fc(2.3.2)136 b(Algorithms)45 b(based)g(on)g(detecting)h(the)g(strong)
f(comp)t(onen)l(ts)-116 3960 y Fr(All)35 b(v)m(ertices)i(of)f(a)h
(strong)f(comp)s(onen)m(t)h(ha)m(v)m(e)g(the)g(same)g(successor)i(set.)
56 b(Purdom)36 b([101)o(])h(presen)m(ted)h(the)-116 4094
y(\014rst)33 b(transitiv)m(e)f(closure)h(algorithm)c(based)34
b(on)e(this)g(fact.)44 b(The)33 b(algorithm)c(consists)34
b(of)e(four)g(parts:)3 4299 y(1.)49 b(Detect)30 b(the)h(strong)f(comp)s
(onen)m(ts)g(of)g(the)g(input)g(graph)g Fn(G)g Fr(and)g(build)f(its)h
(condensation)g(graph)p 3772 4221 77 4 v 30 w Fn(G)p
Fr(.)3 4507 y(2.)49 b(Using)38 b(the)h(partial)d(order)j(on)f(the)h
(strong)g(comp)s(onen)m(ts)g(induced)g(b)m(y)h(the)f(edges)h(of)p
3395 4429 V 38 w Fn(G)p Fr(,)g(sort)e(the)128 4641 y(v)m(ertices)33
b(of)p 592 4563 V 33 w Fn(G)o Fr(,)g(i.e.,)f(the)h(strong)g(comp)s
(onen)m(ts)g(of)f Fn(G)p Fr(,)h(in)m(to)f(a)g(top)s(ological)d(order.)3
4848 y(3.)49 b(Compute)23 b(the)h(transitiv)m(e)e(closure)i(of)p
1542 4770 V 22 w Fn(G)p Fr(.)41 b(Start)23 b(from)f(the)h(top)s
(ologically)c(greatest)24 b(v)m(ertex)h(of)p 3619 4770
V 23 w Fn(G)e Fr(and)128 4982 y(w)m(ork)32 b(bac)m(k)g(to)f(the)h
(smallest)d(v)m(ertex.)45 b(T)-8 b(o)32 b(form)e(the)h(successor)j(set)
e(of)f(a)g(v)m(ertex)i Fn(C)38 b Fr(of)p 3391 4904 V
31 w Fn(G)p Fr(,)31 b(com)m(bine)128 5116 y(the)e(v)m(ertices)h
(adjacen)m(t)g(from)d Fn(C)36 b Fr(and)29 b(their)f(successor)k(sets.)
43 b(The)30 b(top)s(ological)25 b(order)k(ensures)i(that)128
5249 y(the)36 b(successor)j(sets)f(of)e(v)m(ertices)h(adjacen)m(t)h
(from)d Fn(C)43 b Fr(are)36 b(computed)h(b)s(efore)g(the)f(successor)j
(set)e(of)128 5383 y Fn(C)7 b Fr(.)3 5591 y(4.)49 b(Con)m(v)m(ert)44
b(the)f(transitiv)m(e)g(closure)g(of)p 1589 5513 V 42
w Fn(G)g Fr(in)m(to)f(the)h(transitiv)m(e)f(closure)h(of)g
Fn(G)p Fr(.)74 b(If)42 b(v)m(ertex)j Fn(x)e Fr(is)g(in)128
5724 y(comp)s(onen)m(t)32 b Fn(X)40 b Fr(and)32 b(v)m(ertex)i
Fn(y)h Fr(in)c(comp)s(onen)m(t)h Fn(Y)21 b Fr(,)32 b(insert)g
Fn(y)k Fr(in)m(to)31 b Fo(Suc)-5 b(c)p Fr(\()p Fn(x)p
Fr(\))32 b(i\013)f Fn(Y)53 b Fr(is)32 b(in)f Fo(Suc)-5
b(c)p Fr(\()p Fn(X)8 b Fr(\))32 b(in)128 5858 y(the)h(transitiv)m(e)f
(closure)g(of)p 1167 5780 V 33 w Fn(G)o Fr(.)p eop
21 8 bop 3778 -294 a Fr(21)30 18 y(The)33 b(details)e(of)g(the)h
(algorithm)d(are)j(complicated:)41 b(the)33 b(listing)c(is)i(sev)m(en)j
(pages)f(long.)42 b(Purdom)31 b(said)-116 152 y(that)h(the)h(\014rst)g
(three)g(parts)g(can)g(b)s(e)g(com)m(bined.)30 301 y(Munro's)i
(algorithm)c([91])j(is)g(also)f(based)j(on)e(the)g(detection)h(of)f
(the)g(strong)h(comp)s(onen)m(ts.)49 b(It)34 b(di\013ers)-116
435 y(mainly)45 b(from)i(Purdom's)g(algorithm)e(in)i(that)g(Munro's)i
(algorithm)44 b(uses)49 b(matrix)d(m)m(ultiplication)d(to)-116
568 y(construct)37 b(the)g(transitiv)m(e)f(closure)g(of)g(the)h
(condensation)g(graph.)55 b(W)-8 b(e)36 b(discuss)i(Munro's)f
(algorithm)d(in)-116 702 y(the)f(next)g(subsection)h(b)s(elo)m(w.)30
851 y(Purdom's)27 b(and)f(Munro's)i(algorithms)c(compute)i(the)h
(strong)g(comp)s(onen)m(ts)g(using)f(virtually)f(iden)m(tical)-116
985 y(metho)s(ds.)46 b(Both)33 b(tra)m(v)m(erse)i(the)f(graph)f(in)g
(depth-\014rst)h(order.)46 b(When)34 b(a)f(cycle)h(is)f(found,)h(the)g
(v)m(ertices)h(in)-116 1119 y(the)29 b(cycle)h(are)f(mark)m(ed)h(as)f
(b)s(eing)g(in)f(the)i(same)f(strong)g(comp)s(onen)m(t)h(and)f(the)h
(pro)s(cess)g(is)f(rep)s(eated.)43 b(Tw)m(o)-116 1252
y(small)26 b(strong)j(comp)s(onen)m(ts)g(ma)m(y)g(b)s(e)g(collapsed)f
(in)m(to)g(a)g(bigger)g(one;)i(the)f(relab)s(eling)e(requires)i
Fn(O)s Fr(\()p Fn(n)17 b Fr(log)f Fn(n)p Fr(\))-116 1386
y(steps)27 b([118)o(].)42 b(Th)m(us,)28 b(the)f(w)m(orst-case)g
(execution)f(time)f(is)g Fn(O)s Fr(\()p Fn(e)8 b Fr(+)g
Fn(n)17 b Fr(log)f Fn(n)p Fr(\).)42 b(Later,)27 b(T)-8
b(arjan)25 b([118])h(presen)m(ted)-116 1519 y(a)42 b(strong)g(comp)s
(onen)m(t)g(algorithm)d(with)j Fn(O)s Fr(\()p Fn(n)29
b Fr(+)f Fn(e)p Fr(\))42 b(w)m(orst-case)i(b)s(ound)f(\(and)f(with)g
(smaller)e(constan)m(t)-116 1653 y(co)s(e\016cien)m(t)34
b(than)f(in)f(Purdom's)i(and)f(Munro's)i(algorithms\).)42
b(If)34 b(w)m(e)g(use)g(T)-8 b(arjan's)34 b(algorithm)c(to)j(detect)
-116 1787 y(the)41 b(strong)f(comp)s(onen)m(ts,)k(the)d(w)m(orst-case)h
(execution)f(time)e(of)h(Purdom's)h(and)g(Munro's)h(algorithms)-116
1920 y(is)j Fn(O)s Fr(\()p Fn(n)30 b Fr(+)h Fn(e)351
1884 y Fi(+)441 1920 y Fr(+)f Fn(l)r Fr(\()p 616 1842
77 4 v Fn(G)q Fr(\)\),)48 b(where)f Fn(l)r Fr(\()p 1209
1842 V Fn(G)p Fr(\))e(is)g(the)h(time)e(required)i(to)f(compute)g(the)h
(transitiv)m(e)f(closure)g(of)-116 2054 y(condensation)33
b(graph)p 746 1976 V 32 w Fn(G)p Fr(.)30 2203 y(In)j(Munro's)h
(algorithm)c Fn(l)r Fr(\()p 1058 2125 V Fn(G)p Fr(\))j(is)f
Fn(O)s Fr(\()p Fn(M)10 b Fr(\()p Fn(n)p Fr(\)\),)37 b(the)f(time)f
(required)h(to)f(compute)h(the)h(pro)s(duct)f(of)f(t)m(w)m(o)-116
2337 y(Bo)s(olean)e(matrices)h(\(see)i(section)g(2.3.3\).)49
b(In)36 b(Purdom's)f(algorithm)d Fn(l)r Fr(\()p 2580
2259 V Fn(G)p Fr(\))j(is)f Fn(O)s Fr(\()p Fn(n)3004 2301
y Fi(2)3067 2337 y Fr(+)23 b Fn(n)p 3224 2284 46 4 v(e)3270
2352 y Fj(r)3308 2337 y Fr(\),)35 b(where)p 3692 2284
V 36 w Fn(e)3738 2352 y Fj(r)3810 2337 y Fr(is)-116 2470
y(the)j(n)m(um)m(b)s(er)g(of)g(edges)h(in)e(the)h(transitiv)m(e)g
(reduction)f(of)h(the)g(condensation)g(graph.)60 b(Goralcik)m(o)m(v)-5
b(a)36 b(and)-116 2604 y(Koub)s(ek)27 b([45])g(presen)m(ted)i(an)d
(algorithm,)f(whic)m(h)j(demonstrates)f(that)g Fn(l)r
Fr(\()p 2587 2526 77 4 v Fn(G)p Fr(\))f(is)h Fn(O)s Fr(\()p
Fn(n)10 b Fr(+)g Fn(e)g Fr(+)g Fn(n)p 3290 2551 46 4
v(e)3336 2619 y Fj(r)3374 2604 y Fr(\).)42 b(The)27 b(term)-116
2738 y Fn(n)p -58 2685 V(e)-13 2753 y Fj(r)62 2738 y
Fr(represen)m(ts)39 b(the)e(time)f(needed)i(to)f(compute)p
1777 2685 V 37 w Fn(e)1822 2753 y Fj(r)1897 2738 y Fr(unions)f(of)h(t)m
(w)m(o)g(successor)i(sets)f(ha)m(ving)f(at)f(most)h Fn(n)-116
2871 y Fr(elemen)m(ts.)46 b(The)35 b(term)d Fn(n)23 b
Fr(+)g Fn(e)34 b Fr(represen)m(ts)h(the)f(time)e(needed)j(to)e(top)s
(ologically)d(order)j(the)h(acyclic)f(graph)-116 3005
y(and)g(its)g(adjacency)i(lists.)46 b(Jaumard)32 b(and)i(Minoux)f([72])
h(presen)m(ted)h(a)f(sligh)m(tly)e(di\013eren)m(t)h(v)m(ersion)h(of)f
(the)-116 3139 y(same)26 b(algorithm)d(and)k(sho)m(w)m(ed)h(that)e
Fn(l)r Fr(\()p 1348 3060 77 4 v Fn(G)p Fr(\))i(=)g Fn(O)s
Fr(\()p Fn(n)10 b Fr(+)g Fn(de)1961 3102 y Fi(+)2018
3139 y Fr(\))26 b(for)g(acyclic)g(graphs)g(with)g(in-degrees)h(b)s
(ounded)-116 3272 y(b)m(y)33 b Fn(d)p Fr(.)30 3421 y(Simon)j([111)o(,)h
(112)o(])g(presen)m(ted)j(a)c(transitiv)m(e)h(closure)g(algorithm)d
(for)i(acyclic)g(graphs)i(that)e(is)h(based)-116 3555
y(on)j(the)h Fo(chain)g(de)-5 b(c)g(omp)g(osition)46
b Fr(of)40 b(the)h(top)s(ologically)36 b(ordered)41 b(graph.)66
b(The)42 b(c)m(hain)e(decomp)s(osition)e(is)-116 3689
y(a)44 b(division)e(of)i(the)g(set)h(of)f(v)m(ertices)h
Fn(V)66 b Fr(in)m(to)43 b(a)h(collection)e(of)i(sets)h
Fn(C)2567 3704 y Fj(i)2595 3689 y Fr(,)i(eac)m(h)e(represen)m(ting)h(a)
d(path)i(in)-116 3822 y(the)34 b(top)s(ologically)c(ordered)35
b(graph.)47 b(A)34 b(successor)j(set)d(is)g(represen)m(ted)i(as)e(a)g
(v)m(ector)h(of)f(length)f Fn(k)s Fr(,)i(where)-116 3956
y Fn(k)45 b Fr(is)c(the)i(n)m(um)m(b)s(er)g(of)e(sets)i(in)f(the)g(c)m
(hain)g(decomp)s(osition.)70 b(In)43 b(a)f(v)m(ector)h(represen)m(ting)
g(the)f(successor)-116 4089 y(set)g Fn(S)6 b Fr(,)44
b(the)e(elemen)m(t)g(at)g(p)s(osition)e Fn(i)i Fr(is)f(the)h(top)s
(ologically)c(smallest)i(elemen)m(t)i(of)f Fn(S)34 b
Fm(\\)29 b Fn(C)3315 4104 y Fj(i)3343 4089 y Fr(.)71
b(The)43 b(c)m(hain)-116 4223 y(decomp)s(osition)g(and)j(the)g(top)s
(ological)41 b(order)46 b(of)f(the)h(graph)f(can)h(b)s(e)f(computed)h
(in)f Fn(O)s Fr(\()p Fn(n)30 b Fr(+)h Fn(e)p Fr(\))45
b(time.)-116 4357 y(Also)e(Simon's)f(algorithm)f(needs)p
1222 4304 46 4 v 45 w Fn(e)1267 4372 y Fj(r)1349 4357
y Fr(unions)i(of)g(t)m(w)m(o)i(successor)h(sets.)77 b(The)45
b(union)e(of)g(t)m(w)m(o)h(successor)-116 4490 y(sets)34
b(that)e(are)h(represen)m(ted)i(using)d(the)h(c)m(hain)g(decomp)s
(osition)d(can)j(b)s(e)g(computed)g(in)f(\002\()p Fn(k)s
Fr(\))g(time)g(where)-116 4624 y Fn(k)49 b Fr(is)d(the)g(n)m(um)m(b)s
(er)h(of)f(sets)h(in)e(the)i(c)m(hain)f(decomp)s(osition.)83
b(Th)m(us,)51 b(Simon's)45 b(algorithm)e(sho)m(ws)48
b(that)-116 4758 y Fn(l)r Fr(\()p -47 4680 77 4 v Fn(G)p
Fr(\))28 b(=)f Fn(O)s Fr(\()p Fn(n)22 b Fr(+)g Fn(e)g
Fr(+)g Fn(k)p 712 4705 46 4 v 3 w(e)757 4773 y Fj(r)795
4758 y Fr(\).)44 b(W)-8 b(e)33 b(study)g(the)g(c)m(hain)g(decomp)s
(osition)e(more)g(thoroughly)h(in)g(Chapter)h(4.)30 4907
y(Ev)m(e)44 b(and)e(Kurki-Suonio)e([40)o(],)45 b(Eb)s(ert)d([36],)i(Sc)
m(hmitz)e([105)o(],)j(and)d(Ioannidis)f(et)h(al.)71 b([62)o(,)42
b(64])g(pre-)-116 5040 y(sen)m(ted)c(algorithms)c(that)j(use)h(the)f
(strong)g(comp)s(onen)m(ts)g(to)g(compute)g(the)g(transitiv)m(e)f
(closure)h(without)-116 5174 y(generating)i(the)h(condensation)g
(graph.)65 b(All)38 b(these)j(algorithms)c(are)j(based)g(on)g(T)-8
b(arjan's)40 b(strong)g(com-)-116 5308 y(p)s(onen)m(t)34
b(algorithm.)43 b(The)35 b(w)m(orst-case)g(execution)f(time)e(of)h
(these)i(algorithms)c(is)i(t)m(ypically)f Fn(O)s Fr(\()p
Fn(ne)23 b Fr(+)f Fn(n)3771 5272 y Fi(2)3811 5308 y Fr(\).)-116
5441 y(W)-8 b(e)37 b(discuss)h(these)g(algorithms)c(more)i(thoroughly)g
(in)g(Chapter)h(3)g(and)f(compare)h(them)f(with)g(our)h(new)-116
5575 y(transitiv)m(e)32 b(closure)h(algorithms.)30 5724
y(A)f(w)m(eakness)k(in)31 b(transitiv)m(e)h(closure)g(algorithms)e
(that)i(are)h(based)g(on)f(strong)g(comp)s(onen)m(t)h(detection)-116
5858 y(is)43 b(that)g(these)i(algorithms)c(cannot)j(solv)m(e)f(other)h
(closed)g(semiring)e(problems.)75 b(Ho)m(w)m(ev)m(er,)49
b(for)43 b(transi-)p eop
22 9 bop -116 -294 a Fr(22)-116 18 y(tiv)m(e)41 b(closure)h
(computation)e(these)j(algorithms)c(are)i(in)g(most)g(cases)i(faster)e
(and)h(more)f(practical)f(than)-116 152 y(algorithms)30
b(that)i(can)h(solv)m(e)g(an)m(y)g(closed)g(semiring)e(problem.)-116
456 y Fc(2.3.3)136 b(Algorithms)45 b(based)g(on)g(matrix)h(m)l
(ultiplication)-116 654 y Fr(Matrix)c(m)m(ultiplication)37
b(and)43 b(transitiv)m(e)e(closure)i(computation)e(are)h(closely)g
(related.)72 b(Let)43 b Fn(A)f Fr(b)s(e)g(the)-116 788
y Fn(n)25 b Fm(\002)g Fn(n)36 b Fr(adjacency)h(matrix)e(of)h(a)g(graph)
g Fn(G)e Fr(=)f(\()p Fn(V)5 b(;)17 b(E)6 b Fr(\).)54
b(Then)38 b Fn(A)2310 751 y Fi(2)2383 788 y Fr(=)c Fn(A)25
b Fm(^)g Fn(A)36 b Fr(is)g(another)g Fn(n)25 b Fm(\002)g
Fn(n)36 b Fr(Bo)s(olean)-116 921 y(matrix)41 b(suc)m(h)j(that)f
Fn(A)736 885 y Fi(2)775 921 y Fr([)p Fn(i;)17 b(j)6 b
Fr(])45 b(=)g Fp(true)e Fr(i\013)e Fn(G)i Fr(con)m(tains)g(a)f(path)h
Fn(v)2379 936 y Fj(i)2440 868 y Fl(\003)2407 921 y Fm(!)p
Fn(v)2554 936 y Fj(j)2633 921 y Fr(of)g(length)f(2.)74
b(More)43 b(generally)-8 b(,)-116 1055 y(matrix)28 b
Fn(A)271 1019 y Fj(k)344 1055 y Fr(is)i(an)g Fn(n)18
b Fm(\002)f Fn(n)31 b Fr(Bo)s(olean)e(matrix)f(suc)m(h)k(that)e
Fn(A)2019 1019 y Fj(k)2062 1055 y Fr([)p Fn(i;)17 b(j)6
b Fr(])28 b(=)f Fp(true)j Fr(i\013)f Fn(G)h Fr(con)m(tains)g(a)g(path)h
Fn(v)3556 1070 y Fj(i)3616 1002 y Fl(\003)3584 1055 y
Fm(!)p Fn(v)3731 1070 y Fj(j)3797 1055 y Fr(of)-116 1188
y(length)g Fn(k)s Fr(.)43 b(Only)32 b(simple)e(paths)j(are)e(needed)j
(in)d(the)h(construction)g(of)g(the)g(transitiv)m(e)f(closure;)i(th)m
(us)g Fn(A)3790 1152 y Fi(+)3849 1188 y Fr(,)-116 1322
y(the)g(adjacency)h(matrix)d(of)h(the)h(transitiv)m(e)f(closure)h(of)f
Fn(G)p Fr(,)g(can)h(b)s(e)g(written)128 1531 y Fn(A)201
1490 y Fi(+)287 1531 y Fr(=)28 b Fn(A)22 b Fm(_)h Fn(A)648
1490 y Fi(2)710 1531 y Fm(_)f Fn(:)17 b(:)g(:)22 b Fm(_)g
Fn(A)1096 1490 y Fj(n)3675 1531 y Fr(\(2.2\))-116 1740
y(F)-8 b(urman)41 b([43)o(])i(sho)m(w)m(ed)h(that)e Fn(A)1092
1704 y Fi(+)1193 1740 y Fr(can)g(b)s(e)h(computed)f(in)f
Fn(O)s Fr(\(log)16 b Fn(n)p Fr(\))42 b(iteration)f(steps)i(using)f(the)
g(simple)-116 1874 y(iteration)30 b(form)m(ula)128 2083
y Fn(A)201 2098 y Fj(k)r Fi(+1)361 2083 y Fr(=)e Fn(A)538
2098 y Fj(k)603 2083 y Fm(_)22 b Fn(A)764 2042 y Fi(2)764
2108 y Fj(k)3675 2083 y Fr(\(2.3\))-116 2292 y Fn(A)17
b Fm(^)g Fn(B)35 b Fr(can)c(b)s(e)f(formed)f(b)m(y)i(represen)m(ting)g
Fp(true)f Fr(as)h(one)f(and)g Fp(false)g Fr(as)g(zero)h(and)f
(computing)f(the)h(matrix)-116 2426 y(pro)s(duct)f(of)f
Fn(A)g Fr(and)h Fn(B)k Fr(o)m(v)m(er)d(the)f(ring)e(of)h(in)m(tegers)h
(mo)s(dulo)e Fn(n)14 b Fr(+)g(1)28 b(and)g(b)m(y)i(normalizing)25
b(non-zero)j(en)m(tries)-116 2559 y(to)j(ones.)44 b(Assuming)31
b(that)g(ordinary)f(matrix)g(m)m(ultiplication)d(tak)m(es)33
b Fn(O)s Fr(\()p Fn(n)2669 2523 y Fj(\013)2718 2559 y
Fr(\))e(time,)f(F)-8 b(urman's)31 b(algorithm)-116 2693
y(computes)k(the)h(transitiv)m(e)e(closure)h(in)g Fn(O)s
Fr(\()p Fn(n)1546 2657 y Fj(\013)1611 2693 y Fr(log)17
b Fn(n)p Fr(\))35 b(time.)49 b(Copp)s(ersmith)35 b(and)g(Winograd)f
([29])h(sho)m(w)m(ed)-116 2827 y(that)d Fn(\013)c Fm(\024)h
Fr(2)p Fn(:)p Fr(376.)30 2960 y(An)23 b(ev)m(en)h(closer)e(connection)h
(b)s(et)m(w)m(een)h(matrix)d(m)m(ultiplication)d(and)23
b(transitiv)m(e)f(closure)g(computation)-116 3094 y(w)m(as)46
b(detected)h(b)m(y)g(Munro)f([91)o(])g(and)g(Fisc)m(her)g(and)f(Mey)m
(er)j([41)o(],)h(who)d(pro)m(v)m(ed)h(the)f(follo)m(wing)d(result,)-116
3228 y(whic)m(h)24 b(sho)m(ws)g(that)f(matrix)f(m)m(ultiplication)d
(and)k(transitiv)m(e)g(closure)g(computation)f(are)h(computationally)
-116 3361 y(equiv)-5 b(alen)m(t.)-116 3570 y Fp(Theorem)45
b(2.1.)40 b Fr(Let)g Fn(M)10 b Fr(\()p Fn(n)p Fr(\))40
b(b)s(e)g(a)f(function)g(satisfying)g Fn(M)10 b Fr(\(2)p
Fn(n)p Fr(\))40 b Fm(\025)g Fr(4)p Fn(M)10 b Fr(\()p
Fn(n)p Fr(\))40 b(and)g Fn(M)10 b Fr(\(3)p Fn(n)p Fr(\))40
b Fm(\024)g Fr(27)p Fn(M)10 b Fr(\()p Fn(n)p Fr(\).)-116
3704 y(Then)31 b(the)f(transitiv)m(e)g(closure)g(can)g(b)s(e)g
(computed)g(in)f Fn(O)s Fr(\()p Fn(M)10 b Fr(\()p Fn(n)p
Fr(\)\))30 b(time)f(i\013)f(the)j(pro)s(duct)f(of)f(t)m(w)m(o)i
(arbitrary)-116 3838 y Fn(n)22 b Fm(\002)h Fn(n)33 b
Fr(matrices)e(can)i(b)s(e)g(computed)g(in)e Fn(O)s Fr(\()p
Fn(M)10 b Fr(\()p Fn(n)p Fr(\)\))33 b(time.)30 4047 y(Th)m(us,)46
b(the)c(re\015exiv)m(e)h(transitiv)m(e)f(closure)g(can)g(b)s(e)g
(computed)g(in)f Fn(O)s Fr(\()p Fn(n)2749 4011 y Fj(\013)2798
4047 y Fr(\))g(time)g(where)i Fn(\013)h Fm(\024)g Fr(2)p
Fn(:)p Fr(376.)-116 4180 y(Munro)33 b([91)o(])g(presen)m(ted)i(the)e
(follo)m(wing)d(algorithm)f(that)j(manifests)g(the)h(theorem)g(ab)s(o)m
(v)m(e.)3 4412 y(1.)49 b(Detect)30 b(the)h(strong)f(comp)s(onen)m(ts)g
(of)g(the)g(input)g(graph)g Fn(G)g Fr(and)g(build)f(its)h(condensation)
g(graph)p 3772 4334 77 4 v 30 w Fn(G)p Fr(.)3 4626 y(2.)49
b(Using)38 b(the)h(partial)d(order)j(on)f(the)h(strong)g(comp)s(onen)m
(ts)g(induced)g(b)m(y)h(the)f(edges)h(of)p 3395 4548
V 38 w Fn(G)p Fr(,)g(sort)e(the)128 4760 y(strong)32
b(comp)s(onen)m(ts)h(in)m(to)f(a)g(top)s(ological)d(order.)3
4974 y(3.)49 b(Build)33 b(an)h(adjacency)i(matrix)d Fn(A)i
Fr(corresp)s(onding)g(to)p 2160 4896 V 34 w Fn(G)p Fr(.)50
b(Since)p 2570 4896 V 34 w Fn(G)35 b Fr(is)f(top)s(ologically)c
(ordered,)36 b(the)128 5107 y(matrix)31 b(is)h(in)g(the)h(upp)s(er)g
(triangular)d(form.)3 5322 y(4.)49 b(Compute)29 b(the)h(transitiv)m(e)f
(closure)h(of)f Fn(A)h Fr(recursiv)m(ely)g(using)g(the)g(follo)m(wing)c
(iden)m(tit)m(y)k([41)o(])g(where)h Fn(A)128 5455 y Fr(\(and)h(hence)i
Fn(A)699 5470 y Fi(11)807 5455 y Fr(and)e Fn(A)1069 5470
y Fi(22)1144 5455 y Fr(\))h(are)f(upp)s(er)h(triangular:)372
5758 y Fn(A)445 5717 y Fl(\003)512 5758 y Fr(=)615 5612
y Fk( )698 5691 y Fn(A)771 5706 y Fi(11)943 5691 y Fn(A)1016
5706 y Fi(12)747 5825 y Fr(0)147 b Fn(A)1016 5840 y Fi(22)1107
5612 y Fk(!)1173 5635 y Fl(\003)1240 5758 y Fr(=)1344
5612 y Fk( )1426 5691 y Fn(A)1499 5655 y Fl(\003)1499
5716 y Fi(11)1672 5691 y Fn(A)1745 5655 y Fl(\003)1745
5716 y Fi(11)1819 5691 y Fn(A)1892 5706 y Fi(12)1967
5691 y Fn(A)2040 5655 y Fl(\003)2040 5716 y Fi(22)1476
5825 y Fr(0)294 b Fn(A)1892 5789 y Fl(\003)1892 5850
y Fi(22)2132 5612 y Fk(!)3675 5758 y Fr(\(2.4\))p eop
23 10 bop 3778 -294 a Fr(23)30 18 y(In)28 b(step)h(4,)g(w)m(e)f(assume)
h(that)e Fn(A)1204 33 y Fi(11)1279 18 y Fr(,)i Fn(A)1408
33 y Fi(22)1483 18 y Fr(,)g(and)e Fn(A)1796 33 y Fi(12)1899
18 y Fr(are)h(of)f(order)h(2)2462 -18 y Fj(i)2490 18
y Fr(,)h(whic)m(h)f(implies)e(that)h Fn(A)h Fr(is)f(of)h(order)-116
152 y(2)-67 116 y Fj(i)p Fi(+1)51 152 y Fr(.)64 b(The)41
b(algorithm)36 b(can)k(b)s(e)f(generalized)g(for)g(an)h(arbitrary)e
(matrix)g(b)m(y)i(padding)f(it)g(with)g(zeros)h(to)-116
286 y(mak)m(e)33 b(it)f(of)h(order)g(2)653 249 y Fj(i)681
286 y Fr(.)45 b Fn(A)826 301 y Fi(11)934 286 y Fr(and)34
b Fn(A)1198 301 y Fi(22)1306 286 y Fr(represen)m(t)h(t)m(w)m(o)f
(subgraphs)g Fn(S)2434 301 y Fi(1)2506 286 y Fr(and)g
Fn(S)2757 301 y Fi(2)2829 286 y Fr(of)p 2941 208 77 4
v 33 w Fn(G)p Fr(,)f(and)g Fn(A)3341 301 y Fi(12)3449
286 y Fr(represen)m(ts)-116 419 y(the)39 b(connections)h(b)s(et)m(w)m
(een)h(these)g(subgraphs.)64 b(The)40 b(term)f Fn(A)2270
383 y Fl(\003)2270 444 y Fi(11)2344 419 y Fn(A)2417 434
y Fi(12)2492 419 y Fn(A)2565 383 y Fl(\003)2565 444 y
Fi(22)2679 419 y Fr(ab)s(o)m(v)m(e)h(can)f(b)s(e)h(in)m(terpreted)g(in)
-116 553 y(the)f(follo)m(wing)c(w)m(a)m(y:)57 b(a)38
b(path)g Fn(v)1126 500 y Fl(\003)1094 553 y Fm(!)o Fn(u)p
Fr(,)i(where)f Fn(v)k Fr(is)37 b(in)h(subgraph)h Fn(S)2405
568 y Fi(1)2483 553 y Fr(and)f Fn(u)g Fr(is)g(in)g(subgraph)h
Fn(S)3485 568 y Fi(2)3524 553 y Fr(,)h(can)f(b)s(e)-116
686 y(constructed)d(b)m(y)g(joining)d(a)h(path)h Fn(v)1271
633 y Fl(\003)1239 686 y Fm(!)o Fn(x)h Fr(that)e(is)h(en)m(tirely)f(in)
g Fn(S)2273 701 y Fi(1)2347 686 y Fr(with)h(a)f(path)h
Fn(y)2968 633 y Fl(\003)2937 686 y Fm(!)o Fn(u)f Fr(that)h(is)f(en)m
(tirely)h(in)-116 820 y Fn(S)-56 835 y Fi(2)16 820 y
Fr(b)m(y)e(an)g(edge)g(\()p Fn(x;)17 b(y)t Fr(\).)30
963 y(Steps)29 b(1{3)f(tak)m(e)h Fn(O)s Fr(\()p Fn(n)842
926 y Fi(2)881 963 y Fr(\))f(time.)41 b(Munro)28 b(sho)m(w)m(ed)i(that)
f(step)g(4)f(requires)h Fn(O)s Fr(\()p Fn(m)2900 926
y Fj(\013)2949 963 y Fr(\))f(op)s(erations,)g(where)i
Fn(m)-116 1096 y Fr(is)g(the)h(n)m(um)m(b)s(er)g(of)g(strong)f(comp)s
(onen)m(ts)i(and)e(an)h(ordinary)f(matrix)f(m)m(ultiplication)d(tak)m
(es)33 b Fn(O)s Fr(\()p Fn(m)3542 1060 y Fj(\013)3590
1096 y Fr(\))e(time.)-116 1230 y(Th)m(us,)j(the)f(total)e(execution)i
(time)e(is)i Fn(O)s Fr(\()p Fn(n)1490 1194 y Fj(\013)1538
1230 y Fr(\))g(time)e(in)h(the)h(w)m(orst)g(case.)30
1372 y(Arlazo)m(v)k(et)h(al.)56 b([14])37 b(presen)m(ted)j(a)c(metho)s
(d)h(\(called)f(the)i(\\four)f(Russians")g(algorithm)d(and)k(appar-)
-116 1506 y(en)m(tly)30 b(due)i(to)e(Kronro)s(d)f([127]\))h(for)g(m)m
(ultiplying)d(t)m(w)m(o)k(Bo)s(olean)e(matrices)h(and)g(computing)g
(the)g(re\015exiv)m(e)-116 1639 y(transitiv)m(e)25 b(closure)g(in)g
Fn(O)s Fr(\()p Fn(n)910 1603 y Fi(3)949 1639 y Fn(=)17
b Fr(log)f Fn(n)p Fr(\))26 b(steps,)i(b)s(oth)d(in)g(the)h(w)m(orst)h
(case)f(and)g(on)f(the)h(a)m(v)m(erage)h([126)o(].)41
b(O'Neill)-116 1773 y(and)e(O'Neill)e([97])i(ga)m(v)m(e)i(another)e
(algorithm)e(for)h(this)h(problem)g(that)g(runs)h(in)f
Fn(O)s Fr(\()p Fn(n)3130 1737 y Fi(2)3169 1773 y Fr(\))g(exp)s(ected)i
(time.)-116 1907 y(Adleman)27 b(et)i(al.)41 b([2])29
b(presen)m(ted)h(a)f(w)m(a)m(y)h(to)e(reduce)i(the)f(n)m(um)m(b)s(er)g
(of)f(bit)g(op)s(erations)f(required)i(in)f(Bo)s(olean)-116
2040 y(matrix)j(m)m(ultiplication)d(and)k(transitiv)m(e)h(closure.)30
2183 y(Aho)28 b(et)f(al.)41 b(generalized)27 b(Theorem)h(2.1)f(b)m(y)i
(sho)m(wing)e(that)h(when)g(the)g(scalars)g(come)f(from)f(an)m(y)j
(closed)-116 2316 y(semiring,)38 b(the)h(pro)s(duct)g(of)g(t)m(w)m(o)g
(matrices)f(is)g(computationally)e(equal)j(to)f(the)h(closure)g(of)f
(one)h(matrix)-116 2450 y(\(see)33 b(Theorem)g(5.6,)g(page)f(202,)g(in)
g([10]\).)30 2592 y(Although)21 b(the)i(transitiv)m(e)e(closure)i
(algorithms)c(based)k(on)f(matrix)e(m)m(ultiplication)e(ha)m(v)m(e)23
b(go)s(o)s(d)e(asymp-)-116 2726 y(totic)37 b(time)f(b)s(ounds,)k(they)e
(are)g(not)f(practical,)h(since)g(the)g(constan)m(t)h(factors)e(are)h
(high)f(and)h(since)g(they)-116 2860 y(use)33 b(the)g(adjacency)h
(matrix)d(represen)m(tation,)j(whic)m(h)f(is)f(uneconomical)f(for)h
(sparse)i(graphs.)-116 3219 y Fc(2.3.4)136 b(T)-11 b(ransitiv)l(e)46
b(closure)f(computation)h(in)e(databases)-116 3435 y
Fr(The)50 b(relational)d(data)i(mo)s(del)f([123])h(is)g(curren)m(tly)i
(the)f(most)f(p)s(opular)f(data)i(mo)s(del)e(in)h(commercial)-116
3569 y(database)41 b(systems.)70 b(Relational)38 b(databases)k(use)g
(relational)c(query)k(languages,)h(whic)m(h)e(are)g(based)h(on)-116
3702 y(relational)30 b(algebra)i(or,)g(equiv)-5 b(alen)m(tly)d(,)33
b(on)g(\014rst-order)g(relational)d(calculus,)j(b)s(oth)f(in)m(tro)s
(duced)i(b)m(y)g(Co)s(dd)-116 3836 y([27)o(,)f(28)o(].)44
b(A)32 b(relational)d(query)34 b(language)d(consists)i(of)e(a)h(small)e
(set)j(of)f(simple)e(declarativ)m(e)i(op)s(erators)g(on)-116
3969 y(relation)25 b(tables)h(corresp)s(onding)h(to)f(mathematical)e
(relations.)40 b(Complicated)25 b(queries)j(can)f(b)s(e)g(expressed)
-116 4103 y(b)m(y)c(com)m(bining)e(simple)g(relational)e(op)s(erators.)
40 b(An)23 b(essen)m(tial)f(elemen)m(t)g(in)g(the)h(success)i(of)d
(relational)d(query)-116 4237 y(languages)32 b(has)h(b)s(een)g(that)f
(the)h(relational)d(op)s(erators)i(can)h(b)s(e)g(implemen)m(ted)e
(e\016cien)m(tly)-8 b(.)30 4379 y(Recen)m(tly)g(,)29
b(it)e(has)g(b)s(ecome)h(clear)e(that)i(the)f(relational)e(data)i(mo)s
(del)e(lac)m(ks)j(the)g(expressiv)m(eness)j(that)c(is)-116
4513 y(needed)36 b(in)e(man)m(y)g(mo)s(dern)g(applications,)g(for)g
(instance)h(in)e(the)j(areas)e(of)h(arti\014cial)c(in)m(telligence,)j
(CAD,)-116 4646 y(and)g(soft)m(w)m(are)h(engineering.)46
b(The)35 b(relational)c(mo)s(del)h(has)i(t)m(w)m(o)h(main)d
(shortcomings.)47 b(First,)33 b(the)h(mo)s(del)-116 4780
y(is)40 b(v)-5 b(alue)40 b(orien)m(ted,)j(whereas)g(in)d(man)m(y)g
(applications)f(the)i(natural)f(w)m(a)m(y)i(to)f(represen)m(t)h(data)f
(is)f(ob)5 b(ject)-116 4914 y(orien)m(ted.)42 b(Ob)5
b(ject)29 b(orien)m(ted)f(data)g(mo)s(dels)f([23,)h(123)o(])g(ha)m(v)m
(e)i(therefore)e(b)s(ecome)h(p)s(opular)e(in)g(recen)m(t)i(y)m(ears,)
-116 5047 y(and)40 b(m)m(uc)m(h)g(researc)m(h)i(has)e(b)s(een)h(done)g
(in)e(this)g(area)h(\(see)h(for)f(instance)g([16,)g(23)o(,)g(132,)g
(133)o(]\).)66 b(Second,)-116 5181 y(relational)37 b(query)42
b(languages)e(cannot)h(express)i(an)m(y)e(kind)g(of)f(recursion.)68
b(Ev)m(en)42 b(the)f(simplest)f(kind)g(of)-116 5315 y(recursiv)m(e)g
(query)-8 b(,)41 b(the)e(transitiv)m(e)f(closure)g(of)g(a)g(binary)h
(relation,)f(cannot)g(b)s(e)h(expressed)i(in)d(relational)-116
5448 y(algebra)31 b([13].)30 5591 y(Sev)m(eral)44 b(prop)s(osals)e(for)
h(in)m(tro)s(ducing)f(recursion)h(to)g(relational)d(languages)j(ha)m(v)
m(e)i(b)s(een)f(presen)m(ted.)-116 5724 y(Zlo)s(of)37
b([134])j(suggested)h(augmen)m(ting)e(relational)e(algebra)i(with)g(a)h
(transitiv)m(e)g(closure)g(op)s(erator.)65 b(Aho)-116
5858 y(and)30 b(Ullman)d([13)o(])j(prop)s(osed)g(augmen)m(ting)f
(relational)d(algebra)j(with)g(a)g(least)h(\014xed)g(p)s(oin)m(t)f(op)s
(erator)g(that)p eop
24 11 bop -116 -294 a Fr(24)-116 18 y(enables)31 b(a)f(wider)g(class)g
(of)g(recursiv)m(e)i(queries)f(than)g(the)g(transitiv)m(e)e(closure)i
(op)s(erator.)42 b(Rosen)m(thal)30 b(et)h(al.)-116 152
y([103)o(])e(presen)m(ted)h(what)f(they)g(call)e(\\tra)m(v)m(ersal)h
(recursion,")i(i.e.,)f(recursiv)m(e)g(queries)h(that)e(mo)s(del)f(tra)m
(v)m(ersal)-116 286 y(of)33 b(a)h(directed)g(graph.)47
b(Agra)m(w)m(al)33 b([3])h(prop)s(osed)g(a)g(so)g(called)e
Fo(alpha)41 b Fr(op)s(erator)33 b(that)g(enables)h(generalized)-116
419 y(linear)h(recursiv)m(e)j(queries.)57 b(Sippu)36
b(and)h(Soisalon-Soininen)d([113)o(])j(presen)m(ted)i(a)d(generalized)g
(transitiv)m(e)-116 553 y(closure)d(op)s(erator)g(based)h(on)f(a)g
(comp)s(osition)d(op)s(erator)j(that)g(is)g(generalized)f(to)h
Fo(n)7 b Fr(-ary)33 b(relations.)44 b(Cruz)-116 686 y(and)34
b(Norv)m(ell)e([30])i(presen)m(ted)h(\\aggregativ)m(e)e(closure,")h
(i.e.,)g(generalized)f(transitiv)m(e)g(closure)h(with)f(path)-116
820 y(computations,)38 b(e.g.,)h(the)f(computation)e(of)i(the)g
(shortest)h(paths)f(b)s(et)m(w)m(een)i(v)m(ertices,)g(and)e
(aggregation)-116 954 y(of)33 b(information,)e(e.g.,)j(computing)f(a)m
(v)m(erages)i(or)e(sums)h(of)g(\014elds)f(of)h(relations.)45
b(Eder)35 b([37)o(])f(and)g(Dar)f(and)-116 1087 y(Agra)m(w)m(al)d([31,)
g(32])g(extended)j(the)e(p)s(opular)f(SQL)g(query)i(language)e(with)g
(similar)d(generalized)j(transitiv)m(e)-116 1221 y(closure)23
b(op)s(erators.)40 b(The)25 b(ANSI/SQL)e(standards)i(committee)c(also)i
(prop)s(osed)g(the)h(inclusion)e(of)h(a)g(closure)-116
1355 y(op)s(erator)32 b(\(called)f(\\recursiv)m(e)j(union"\))d(in)m(to)
h(the)h(query)h(language)e(SQL)g([39,)g(109,)g(110,)g(115].)30
1488 y(The)38 b(approac)m(hes)h(to)e(in)m(tro)s(ducing)f(general)h
(recursiv)m(e)i(queries)f(ha)m(v)m(e)h(mostly)d(b)s(een)i(based)h(on)e
(logic)-116 1622 y(programming.)63 b(The)41 b(Datalog)d(query)k
(language)d([24,)h(123)o(])g(is)g(the)h(b)s(est-kno)m(wn)h(example.)66
b(Although)-116 1755 y(m)m(uc)m(h)44 b(researc)m(h)i(has)e(b)s(een)h
(done)g(in)e(the)h(area)g(of)g(optimizing)d(general)i(recursiv)m(e)j
(queries)e(\(see,)k(e.g.,)-116 1889 y([15)o(,)32 b(17,)f(123]\),)h(it)e
(seems)j(that)e(general)g(recursion)h(cannot)g(b)s(e)g(implemen)m(ted)e
(e\016cien)m(tly)-8 b(.)44 b(On)32 b(the)g(other)-116
2023 y(hand,)39 b(it)d(seems)j(that)e(most)g(recursiv)m(e)i(queries)f
(that)f(o)s(ccur)h(in)f(practical)e(applications)h(are)h(transitiv)m(e)
-116 2156 y([15)o(,)31 b(68].)43 b(F)-8 b(urther,)31
b(Jagadish)g(et)g(al.)42 b([68)o(])31 b(sho)m(w)m(ed)i(that)e(all)e
(linear)g(recursiv)m(e)k(queries)f(can)f(b)s(e)g(expressed)-116
2290 y(using)41 b(transitiv)m(e)h(closure)g(p)s(ossibly)f(preceded)j
(and)e(follo)m(w)m(ed)f(b)m(y)i(op)s(erations)e(a)m(v)-5
b(ailable)40 b(in)h(relational)-116 2424 y(algebra.)71
b(Therefore,)46 b(the)c(recen)m(t)i(approac)m(hes)f(to)f(in)m(tro)s
(duce)g(recursion)h(to)e(relational)e(algebra)j(ha)m(v)m(e)-116
2557 y(concen)m(trated)34 b(on)e(transitiv)m(e)h(closure)f(in)g(its)g
(v)-5 b(arious)32 b(forms.)30 2691 y(Sev)m(eral)c(transitiv)m(e)f
(closure)h(algorithms)d(for)i(database)h(en)m(vironmen)m(ts)g(ha)m(v)m
(e)h(b)s(een)g(prop)s(osed.)42 b(These)-116 2824 y(can)33
b(b)s(e)f(divided)h(in)m(to)e Fo(iter)-5 b(ative)p Fr(,)33
b Fo(matrix-b)-5 b(ase)g(d)p Fr(,)31 b Fo(gr)-5 b(aph-b)g(ase)g(d)p
Fr(,)31 b(and)i Fo(hybrid)43 b Fr(algorithms)29 b([31].)-116
3097 y Fp(Iterativ)m(e)36 b(algorithms)-116 3295 y Fr(The)31
b(iterativ)m(e)f(algorithms)f(compute)h(the)i(transitiv)m(e)e(closure)h
(of)f(a)h(relation)e Fn(R)i Fr(b)m(y)h(ev)-5 b(aluating)29
b(the)i(least)-116 3428 y(\014xed)j(p)s(oin)m(t)d(of)h(the)h
(relational)d(equation)i([13]:)128 3664 y Fn(R)203 3622
y Fi(+)289 3664 y Fr(=)c Fn(R)468 3622 y Fi(+)549 3664
y Fm(\016)22 b Fn(R)h Fm([)g Fn(R)2794 b Fr(\(2.5\))30
3899 y(A)43 b(simple)e(algorithm)f(for)i(computing)g(the)h(least)g
(\014xed)h(p)s(oin)m(t)e(is)g(presen)m(ted)j(in)d(Figure)32
b(2.7.)74 b(The)-116 4032 y(algorithm)29 b(is)j(called)g
Fo(semi-naive)38 b Fr(in)32 b([15)o(].)-116 4243 y Fh(\(1\))218
b Ff(R)287 4210 y Fi(+)376 4243 y Fh(:=)30 b Ff(R)q Fh(;)-116
4368 y(\(2\))218 b(\001)30 b(:=)g Ff(R)q Fh(;)-116 4493
y(\(3\))218 b Fb(do)-116 4619 y Fh(\(4\))385 b(\001)30
b(:=)g(\001)20 b Fe(\016)h Ff(R)g Fe(\000)f Ff(R)1029
4586 y Fi(+)-116 4744 y Fh(\(5\))385 b Ff(R)454 4711
y Fi(+)543 4744 y Fh(:=)30 b Ff(R)739 4711 y Fi(+)818
4744 y Fe([)20 b Fh(\001)-116 4869 y(\(6\))218 b Fb(while)60
b Fh(\001)25 b Fe(6)p Fh(=)g Fe(;)1026 5098 y Fd(Figure)37
b(2.7)p Fr(:)43 b(The)34 b(semi-naiv)m(e)d(algorithm.)30
5323 y(Here)d Fn(R)q Fr(,)g Fn(R)460 5287 y Fi(+)519
5323 y Fr(,)g(and)f(\001)g(are)g(v)-5 b(ariables)26 b(that)h(con)m
(tain)f(relations.)40 b(After)27 b(the)h Fn(i)p Fr(th)f(iteration,)f
(the)i(v)-5 b(ariable)-116 5457 y(\001)33 b(con)m(tains)f(the)h(new)h
(tuples)e(that)h(w)m(ere)h(generated)f(in)f(the)h Fn(i)p
Fr(th)g(iteration.)30 5591 y(Lu)38 b([86)o(])g(presen)m(ted)i(a)d(v)m
(ersion)i(of)e(the)h(semi-naiv)m(e)e(algorithm)f(that)i(uses)i(t)m(w)m
(o)g(strategies)e(to)h(sp)s(eed)-116 5724 y(up)32 b(the)h(computation.)
41 b(First,)32 b(the)g(algorithm)d(reduces)34 b(the)e(input)g(relation)
e Fn(R)j Fr(dynamically)d(after)i(eac)m(h)-116 5858 y(iteration.)55
b(It)37 b(remo)m(v)m(es)h(from)e Fn(R)i Fr(eac)m(h)g(tuple)e(\()p
Fn(x;)17 b(y)t Fr(\))37 b(with)f(no)h(tuple)g(\()p Fn(z)t(;)17
b(x)p Fr(\))38 b(in)e(\001,)i(since)g(no)f(suc)m(h)h(tuple)p
eop
25 12 bop 3778 -294 a Fr(25)-116 18 y(\()p Fn(x;)17 b(y)t
Fr(\))37 b(w)m(ould)i(yield)e(an)m(y)j(new)f(tuples)g(to)f
Fn(R)1571 -18 y Fi(+)1630 18 y Fr(.)61 b(Second,)41 b(Lu's)e(algorithm)
d(hashes)k(the)f(tuples)f(of)g(\001)h(on)-116 152 y(their)29
b(second)i(argumen)m(t)e(and)h(the)g(tuples)g(of)f Fn(R)i
Fr(on)f(their)f(\014rst)h(argumen)m(t.)42 b(The)31 b(algorithm)c(tak)m
(es)j(a)g(pair)-116 286 y(of)37 b(has)h(buc)m(k)m(ets)i(\(one)d(buc)m
(k)m(et)j(of)d(\001)g(and)h(one)g(buc)m(k)m(et)h(of)e
Fn(R)q Fr(\))g(that)h(it)e(can)i(hold)e(in)h(the)h(main)e(memory)-116
419 y(sim)m(ultaneously)31 b(and)i(generates)g(all)e(tuples)i(deriv)-5
b(able)31 b(from)h(those)h(buc)m(k)m(ets.)30 553 y(If)40
b Fn(R)i Fm(\022)f Fn(V)49 b Fm(\002)28 b Fn(V)62 b Fr(and)40
b Fm(j)p Fn(V)22 b Fm(j)40 b Fr(=)h Fn(n)p Fr(,)h(the)f(semi-naiv)m(e)e
(algorithms)f(needs)k(at)e(most)f Fn(n)i Fr(iterations.)65
b(The)-116 686 y(maxim)m(um)30 b(n)m(um)m(b)s(er)i(of)g(iterations)f
(is)h(needed,)i(for)d(instance,)i(when)g(the)g(graph)f
Fn(G)c Fr(=)f(\()p Fn(V)5 b(;)17 b(R)q Fr(\))32 b(consists)h(of)-116
820 y(a)26 b(simple)g(cycle)h(of)g Fn(n)g Fr(elemen)m(ts.)42
b(Ioannidis)26 b([61)o(])h(and)g(V)-8 b(alduriez)26 b(and)h(Boral)f
([124)o(])h(presen)m(ted)j(algorithms)-116 954 y(that)h(need)h(only)f
(a)h(logarithmic)27 b(n)m(um)m(b)s(er)32 b(of)f(iterations.)42
b(The)32 b(logarithmic)c(algorithms)h(can)i(b)s(e)h(deriv)m(ed)-116
1087 y(from)f(the)i(follo)m(wing)d(equation)i(de\014ning)h(the)g
(transitiv)m(e)f(closure:)128 1347 y Fn(R)203 1306 y
Fi(+)289 1347 y Fr(=)422 1239 y Fl(1)397 1264 y Fk(X)393
1449 y Fj(k)r Fi(=1)538 1347 y Fn(R)613 1306 y Fj(k)684
1347 y Fr(=)27 b Fn(R)c Fm(\016)985 1239 y Fl(1)968 1264
y Fk(Y)956 1449 y Fj(k)r Fi(=1)1085 1347 y Fr(\()p Fn(I)30
b Fm([)23 b Fn(R)1360 1306 y Fi(2)1395 1283 y Fa(k)1437
1347 y Fr(\))28 b(=)f Fn(R)d Fm(\016)d Fr(\()p Fn(I)30
b Fm([)23 b Fn(R)q Fr(\))f Fm(\016)g Fr(\()p Fn(I)30
b Fm([)23 b Fn(R)2457 1306 y Fi(2)2496 1347 y Fr(\))f
Fm(\016)g Fr(\()p Fn(I)30 b Fm([)23 b Fn(R)2903 1306
y Fi(4)2942 1347 y Fr(\))17 b Fn(:)g(:)g(:)563 b Fr(\(2.6\))30
1647 y(If)29 b(the)h(domain)e(of)g Fn(R)j Fr(con)m(tains)e
Fn(n)h Fr(elemen)m(ts,)g(the)g(highest)f Fn(k)j Fr(in)d
Fn(R)2502 1611 y Fi(2)2537 1588 y Fa(k)2609 1647 y Fr(that)g(w)m(e)h
(need)g(is)f(log\()p Fn(n)15 b Fr(+)g(1\))g Fm(\000)g
Fr(1.)-116 1781 y(Th)m(us,)49 b(the)44 b(logarithmic)d(algorithm)g
(presen)m(ted)47 b(in)c(Figure)32 b(2.8)44 b(computes)h(the)f
(transitiv)m(e)g(closure)h(in)-116 1914 y(log\()p Fn(n)22
b Fr(+)g(1\))g Fm(\000)h Fr(1)32 b(iterations.)-116 2054
y Fh(\(1\))218 b Ff(R)287 2021 y Fi(+)376 2054 y Fh(:=)30
b Ff(R)q Fh(;)-116 2179 y(\(2\))218 b(\001)30 b(:=)g
Ff(R)q Fh(;)-116 2304 y(\(3\))218 b Ff(\016)34 b Fh(:=)d
Ff(R)-116 2430 y Fh(\(4\))218 b Fb(do)-116 2555 y Fh(\(5\))385
b Ff(\016)34 b Fh(:=)c Ff(\016)24 b Fe(\016)d Ff(\016)s
Fh(;)-116 2680 y(\(6\))385 b(\001)30 b(:=)g Ff(R)686
2647 y Fi(+)765 2680 y Fe(\016)21 b Ff(\016)s Fh(;)-116
2806 y(\(7\))385 b Ff(R)454 2773 y Fi(+)543 2806 y Fh(:=)30
b Ff(R)739 2773 y Fi(+)818 2806 y Fe([)20 b Fh(\001)g
Fe([)g Ff(\016)-116 2931 y Fh(\(8\))218 b Fb(while)60
b Fh(\001)25 b Fe(6)p Fh(=)g Fe(;)1007 3159 y Fd(Figure)37
b(2.8)p Fr(:)44 b(The)33 b(logarithmic)c(algorithm.)30
3385 y(After)40 b(the)h Fn(i)p Fr(th)f(iteration,)g(v)-5
b(ariable)39 b Fn(\016)44 b Fr(con)m(tains)c Fn(R)1991
3349 y Fi(2)2026 3325 y Fa(i)2057 3385 y Fr(,)i(i.e,)f(the)g(tuples)f
(corresp)s(onding)g(to)g(paths)g(of)-116 3519 y(length)24
b(2)223 3483 y Fj(i)276 3519 y Fr(in)f(the)j(graph)e
Fn(G)k Fr(=)f(\()p Fn(V)5 b(;)17 b(R)q Fr(\).)41 b(V)-8
b(ariable)23 b(\001)i(con)m(tains)g(tuples)f(corresp)s(onding)h(to)f
(paths)i(of)e(lengths)-116 3652 y(2)-67 3616 y Fj(i)-17
3652 y Fr(+)e(1)17 b Fn(:)g(:)g(:)e Fr(2)326 3616 y Fj(i)p
Fi(+1)467 3652 y Fm(\000)22 b Fr(1.)30 3786 y(It)48 b(is)f(in)m
(teresting)h(to)f(note)h(that)g(the)g(logarithmic)c(algorithm)h(uses)k
(similar)c(ideas)i(as)h(F)-8 b(urman's)-116 3920 y(algorithm)29
b([43])j(\(see)i(section)f(2.3.3\))f(that)g(is)g(based)i(on)e(matrix)f
(m)m(ultiplication.)30 4053 y(Qadah)37 b(et)g(al.)55
b([102)o(])37 b(presen)m(ted)i(iterativ)m(e)d(algorithms)e(for)i
(solving)g(w)m(eak)i(m)m(ulti-source)d(transitiv)m(e)-116
4187 y(closure)d(problems.)43 b(The)34 b(algorithms)c(resem)m(ble)j
(the)g(semi-naiv)m(e)e(algorithm)e(describ)s(ed)34 b(ab)s(o)m(v)m(e.)30
4320 y(A)28 b(b)s(ene\014t)h(of)e(iterativ)m(e)g(algorithms)e(is)i
(their)h(generalit)m(y)-8 b(.)41 b(They)29 b(can)f(ev)-5
b(aluate)27 b(all)f(kinds)i(of)f(recursiv)m(e)-116 4454
y(queries,)38 b(not)e(just)g(transitiv)m(e)g(closures.)54
b(They)38 b(can)e(solv)m(e)h(single-source)f(and)g(m)m(ulti-source)e
(transitiv)m(e)-116 4588 y(closure)i(problems.)55 b(They)38
b(can)f(also)e(solv)m(e)i(generalized)f(transitiv)m(e)g(closure)h
(problems)f(in)m(v)m(olving)f(path)-116 4721 y(computations)24
b(and)h(aggregation.)39 b(On)26 b(the)f(other)h(hand,)h(the)e
(generalit)m(y)g(of)f(iterativ)m(e)h(algorithms)d(mak)m(es)-116
4855 y(them)g(slo)m(w)m(er)g(than)h(the)f(matrix-based,)h(graph-based,)
i(and)d(h)m(ybrid)h(algorithms)c(that)j(w)m(e)h(describ)s(e)g(b)s(elo)m
(w.)-116 5125 y Fp(Matrix-based)38 b(algorithms)-116
5323 y Fr(The)h(matrix-based)f(transitiv)m(e)g(closure)g(algorithms)e
(for)i(database)h(en)m(vironmen)m(ts)g(are)g(usually)f(dev)m(el-)-116
5457 y(op)s(ed)23 b(from)g(W)-8 b(arshall's)22 b(or)h(W)-8
b(arren's)24 b(algorithm)d(\(see)j(section)g(2.3.1\).)40
b(The)24 b(term)f(\\matrix-based")f(refers)-116 5591
y(to)30 b(the)i(approac)m(h)f(of)f(pro)s(cessing)i(the)f(input,)g(whic)
m(h)g(resem)m(bles)h(W)-8 b(arshall's)30 b(and)h(W)-8
b(arren's)31 b(algorithms,)-116 5724 y(not)j(to)g(the)h(data)f
(represen)m(tation.)49 b(Most)35 b(of)f(these)h(algorithms)d(use)j
(adjacency)h(and)e(successor)j(lists)c(or)-116 5858 y(relation)d
(tables.)p eop
26 13 bop -116 -294 a Fr(26)30 18 y(Lu)31 b(et)g(al.)42
b([87])31 b(presen)m(ted)i(an)e(adaptation)e(of)i(W)-8
b(arren's)32 b(algorithm)27 b(that)k(pro)s(cesses)i(relation)c(tables)
-116 152 y(instead)40 b(of)g(adjacency)i(matrices.)66
b(The)42 b(algorithm,)d(sho)m(wn)j(in)e(Figure)31 b(2.9,)43
b(\014rst)e(sorts)g(the)g(tuples)f(of)-116 286 y(relation)c
Fn(R)k Fr(lexicographically)35 b(b)m(y)40 b(b)s(oth)e(their)g
(\014elds.)62 b(Then)40 b(the)f(tuples)f(are)h(scanned)h(in)e(t)m(w)m
(o)h(passes)-116 419 y(that)32 b(corresp)s(ond)i(to)e(the)h(t)m(w)m(o)g
(passes)h(of)e(W)-8 b(arren's)34 b(algorithm.)-116 553
y Fh(\(1\))218 b Ff(T)43 b Fh(:=)30 b Ff(R)h Fh(sorted)g(b)m(y)f(b)s
(oth)g(its)g(\014elds;)-116 678 y(\(2\))218 b Fb(for)61
b Fh(\()p Ff(x;)15 b(y)s Fh(\))26 b Fe(2)f Ff(T)43 b
Fh(in)29 b(sorted)i(order)e Fb(do)-116 804 y Fh(\(3\))385
b Fb(if)60 b Ff(x)26 b(>)f(y)33 b Fb(then)-116 929 y
Fh(\(4\))551 b Ff(T)43 b Fh(:=)31 b Ff(T)i Fe([)20 b(f)p
Fh(\()p Ff(x;)15 b(y)s Fh(\))p Fe(g)22 b(\016)e Ff(T)13
b Fh(;)-116 1054 y(\(5\))218 b Fb(for)61 b Fh(\()p Ff(x;)15
b(y)s Fh(\))26 b Fe(2)f Ff(T)43 b Fh(in)29 b(sorted)i(order)e
Fb(do)-116 1180 y Fh(\(6\))385 b Fb(if)60 b Ff(x)26 b(<)f(y)33
b Fb(then)-116 1305 y Fh(\(7\))551 b Ff(T)43 b Fh(:=)31
b Ff(T)i Fe([)20 b(f)p Fh(\()p Ff(x;)15 b(y)s Fh(\))p
Fe(g)22 b(\016)e Ff(T)412 1546 y Fd(Figure)38 b(2.9)p
Fr(:)43 b(An)33 b(adaptation)e(of)h(W)-8 b(arren's)34
b(algorithm)29 b(b)m(y)34 b(Lu)e(et)h(al.)42 b([87].)30
1782 y(Agra)m(w)m(al)d(et)i(al.)64 b([5,)40 b(6)o(])g(describ)s(ed)h
(what)f(they)h(call)d Fo(Warshal)5 b(l-derive)-5 b(d)49
b Fr(algorithms.)62 b(These)42 b(algo-)-116 1916 y(rithms)g(do)h(the)h
(same)f(op)s(erations)g(as)h(W)-8 b(arshall's)42 b(algorithm,)h(but)h
(in)e(a)h(di\013eren)m(t)h(order.)76 b(W)-8 b(arren's)-116
2050 y(algorithm)38 b(is)j(an)g(example)g(of)g(a)h(W)-8
b(arshall-deriv)m(ed)40 b(algorithm.)67 b(Agra)m(w)m(al)41
b(et)g(al.)69 b(presen)m(ted)44 b(sev)m(eral)-116 2183
y(W)-8 b(arshall-deriv)m(ed)36 b(algorithms)e(that)j(are)g(suitable)f
(for)h(a)g(database)g(en)m(vironmen)m(t.)58 b(These)39
b(algorithms)-116 2317 y(represen)m(t)i(the)f(input)e(and)i(the)f
(output)h(b)m(y)g(lists)e(and)i(use)g(blo)s(c)m(king)e(to)h(reduce)h
(I/O)f(costs.)65 b(Lists)39 b(are)-116 2451 y(read)c(in)m(to)f(the)h
(main)e(memory)h(and)h(pro)s(cessed)h(one)f(blo)s(c)m(k)g(at)f(a)h
(time.)49 b(The)35 b(w)m(a)m(y)h(of)f(dividing)e(the)i(lists)-116
2584 y(in)m(to)d(blo)s(c)m(ks)g(and)h(the)g(order)g(of)f(pro)s(cessing)
h(the)g(blo)s(c)m(ks)g(di\013ers)f(in)g(the)h(algorithms.)30
2804 y(Ullman)k(and)i(Y)-8 b(annak)j(akis)39 b([122])g(presen)m(ted)i
(another)f(matrix-based)e(algorithm,)g(called)g(the)i
Fo(Grid)-116 2938 y Fr(algorithm)29 b(in)i([8].)43 b(If)32
b Fn(s)g Fr(is)g(the)h(size)f(of)g(the)g(main)f(memory)-8
b(,)31 b(the)h(algorithm)d(splits)j(the)g Fn(n)22 b Fm(\002)f
Fn(n)33 b Fr(adjacency)-116 3071 y(matrix)d Fn(A)h Fr(in)m(to)g
Fn(n)559 3035 y Fi(2)598 3071 y Fn(=s)g Fr(submatrices)h
Fn(A)1334 3086 y Fj(i;j)1445 3071 y Fr(of)f(size)1739
3000 y Fm(p)p 1822 3000 46 4 v 71 x Fn(s)20 b Fm(\002)1985
3000 y(p)p 2068 3000 V 71 x Fn(s)p Fr(.)43 b(Then)32
b(the)g(transitiv)m(e)f(closure)h(is)f(computed)-116
3205 y(using)h(the)h(co)s(de)g(in)f(Figure)f(2.10.)-116
3339 y Fh(\(1\))218 b Fb(for)61 b Ff(k)33 b Fh(:=)e(1)f
Fb(to)61 b Ff(n=)941 3274 y Fe(p)p 1017 3274 43 4 v 65
x Ff(s)30 b Fb(do)61 b(b)s(egin)-116 3464 y Fh(\(2\))385
b Ff(A)452 3479 y Fj(k)r(;k)583 3464 y Fh(:=)30 b Ff(A)777
3431 y Fl(\003)777 3491 y Fj(k)r(;k)878 3464 y Fh(;)-116
3591 y(\(3\))385 b Fb(for)61 b Ff(i)30 b Fh(:=)h(1)f
Fb(to)61 b Ff(n=)1089 3526 y Fe(p)p 1165 3526 V 65 x
Ff(s)30 b Fb(do)-116 3717 y Fh(\(4\))551 b Fb(for)61
b Ff(j)36 b Fh(:=)31 b(1)f Fb(to)61 b Ff(n=)1267 3651
y Fe(p)p 1343 3651 V 66 x Ff(s)30 b Fb(do)-116 3842 y
Fh(\(5\))718 b Ff(A)785 3856 y Fj(i;j)896 3842 y Fh(:=)30
b Ff(A)1090 3856 y Fj(i;j)1191 3842 y Fh(+)19 b Ff(A)1349
3857 y Fj(i;k)1456 3842 y Fe(\002)h Ff(A)1615 3857 y
Fj(k)r(;k)1736 3842 y Fe(\002)g Ff(A)1895 3857 y Fj(k)r(;j)1990
3842 y Fh(;)1123 4070 y Fd(Figure)37 b(2.10)p Fr(:)43
b(The)34 b(Grid)d(algorithm.)30 4302 y(Here)36 b Fn(A)336
4265 y Fl(\003)336 4326 y Fj(k)r(;k)473 4302 y Fr(is)f(the)h
(re\015exiv)m(e)h(transitiv)m(e)e(closure)h(of)f(the)h(sub-matrix)f
Fn(A)2754 4317 y Fj(k)r(;k)2855 4302 y Fr(.)52 b(Since)36
b(the)g(algorithm)c(is)-116 4435 y(designed)25 b(for)e(dense)j(graphs,)
g(it)e(uses)h(the)g(adjacency)h(matrix)c(represen)m(tation.)42
b(Ullman)22 b(and)i(Y)-8 b(annak)j(akis)-116 4569 y(sho)m(w)m(ed)37
b(that)e(if)f Fn(s)f Fm(\024)g Fn(n)776 4533 y Fi(2)815
4569 y Fr(,)j(the)g(algorithm)c(needs)37 b Fn(O)s Fr(\()p
Fn(n)1939 4533 y Fi(3)1978 4569 y Fn(=)2027 4497 y Fm(p)p
2110 4497 46 4 v 72 x Fn(s)p Fr(\))e(I/O)g(op)s(erations)g(in)f(the)i
(w)m(orst)g(case.)53 b(The)-116 4702 y(blo)s(c)m(king)31
b(W)-8 b(arshall-deriv)m(ed)31 b(algorithms)f(b)m(y)j(Agra)m(w)m(al)f
(et)h(al.)42 b([5,)32 b(6])h(need)g Fn(O)s Fr(\()p Fn(n)2924
4666 y Fi(4)2963 4702 y Fn(=s)p Fr(\))f(I/O)g(op)s(erations)g(in)-116
4836 y(the)h(w)m(orst)g(case;)h(th)m(us,)g(the)f(Grid)f(algorithm)d(is)
k(more)f(e\016cien)m(t.)44 b(The)34 b(problem)d(in)h(the)i(Grid)d
(algorithm)-116 4970 y(is)38 b(that)g(all)e(sub-matrices)i(m)m(ust)h(b)
s(e)f(of)g(the)h(same)f(size,)j(whic)m(h)e(ma)m(y)f(lead)g(to)g
(underutilization)d(of)j(the)-116 5103 y(memory)31 b(if)h(the)h(input)f
(is)g(sparse.)30 5323 y(Matrix-based)47 b(algorithms)e(are)i(not)g(as)g
(general)g(as)g(iterativ)m(e)f(algorithms.)85 b(They)49
b(can)e(only)g(b)s(e)-116 5457 y(used)32 b(for)e(computing)f(transitiv)
m(e)h(closures,)i(not)f(general)f(recursiv)m(e)i(queries.)44
b(Matrix-based)31 b(algorithms)-116 5591 y(alw)m(a)m(ys)26
b(compute)f(the)h(full)d(closure)j(and)f(th)m(us)i(cannot)e(b)s(e)h
(used)g(to)f(solv)m(e)h(single-source)f(and)g(m)m(ulti-source)-116
5724 y(transitiv)m(e)g(closure)g(problems)g(e\016cien)m(tly)-8
b(.)41 b(On)26 b(the)g(other)f(hand,)i(they)g(can)e(b)s(e)h(used)h(to)e
(solv)m(e)g(generalized)-116 5858 y(transitiv)m(e)32
b(closure)h(problems)e(in)m(v)m(olving)h(path)g(computations)g(and)h
(aggregation.)p eop
27 14 bop 3778 -294 a Fr(27)-116 18 y Fp(Graph-based)40
b(algorithms)-116 229 y Fr(The)k(graph-based)g(algorithms)d(consider)j
(the)f(input)g(relation)f(as)i(a)f(directed)h(graph)f(and)h(use)g
(graph)-116 362 y(searc)m(h)34 b(to)f(compute)h(the)g(transitiv)m(e)e
(closure.)46 b(Ioannidis)33 b(et)g(al.)45 b([62)o(,)34
b(63)o(,)g(64)o(])g(presen)m(ted)h(t)m(w)m(o)f(transitiv)m(e)-116
496 y(closure)25 b(algorithms)d(called)i Fd(btc)g Fr(and)i
Fd(gdftc)f Fr(that)f(are)h(based)h(on)f(detecting)g(the)h(strong)f
(comp)s(onen)m(ts)g(of)-116 630 y(the)g(input)f(graph)h(and)g(that)g
(are)f(designed)i(for)e(a)h(database)g(en)m(vironmen)m(t.)41
b(W)-8 b(e)25 b(discuss)h(these)h(algorithms)-116 763
y(in)44 b(Chapter)i(3,)j(and)c(compare)g(them)g(with)g(the)g(new)h
(transitiv)m(e)f(closure)h(algorithms)c(that)j(w)m(e)i(ha)m(v)m(e)-116
897 y(dev)m(elop)s(ed.)30 1037 y(Jiang)33 b([73])h(presen)m(ted)i(an)e
(algorithm)d(that)j(uses)i(a)d(com)m(bination)f(of)i(depth-\014rst)h
(and)f(breadth-\014rst)-116 1170 y(tra)m(v)m(ersal)k(to)g(compute)g
(single-source)g(and)g(m)m(ulti-source)f(transitiv)m(e)g(closures)i(of)
f(database)g(relations.)-116 1304 y(The)d(algorithm)d(reduces)k(the)f
(input)f(graph)h(heuristically)d(during)i(the)h(tra)m(v)m(ersal.)50
b(If)35 b(a)f(v)m(ertex)j Fn(v)h Fr(is)c(not)-116 1437
y(in)42 b(the)i(set)g(of)f(source)h(v)m(ertices)g Fn(S)6
b Fr(,)46 b(whose)e(successors)j(w)m(e)d(are)f(computing,)i(and)e(only)
g(one)g(v)m(ertex)i Fn(u)-116 1571 y Fr(adjacen)m(t)30
b(to)f Fn(v)k Fr(exists,)e(the)e(successor)j(set)e(of)f
Fn(v)k Fr(is)c(not)g(needed.)44 b(Instead,)31 b(v)m(ertex)g
Fn(v)i Fr(can)d(b)s(e)f(reduced)i(to)e(a)-116 1705 y(sink)34
b(v)m(ertex)h(b)m(y)g(inserting)e(an)g(edge)i(from)d
Fn(u)i Fr(to)f(eac)m(h)i(v)m(ertex)g(adjacen)m(t)g(from)d
Fn(v)37 b Fr(and)d(deleting)f(all)f(edges)-116 1838 y(lea)m(ving)f
Fn(v)t Fr(.)30 1978 y(T)-8 b(oroslu)38 b(and)g(Qadah)g([121)o(])g
(presen)m(ted)j(a)d(graph-based)g(algorithm)d(for)i(computing)g(strong)
h(m)m(ulti-)-116 2112 y(source)46 b(transitiv)m(e)e(closures.)82
b(Their)45 b(algorithm)c(uses)47 b(a)d(represen)m(tation)i(that)f
(stores)h(the)f(com)m(bined)-116 2245 y(closure,)h(i.e.,)f(all)c(v)m
(ertices)j(reac)m(hable)g(from)d(the)j(source)g(v)m(ertices.)76
b(Eac)m(h)44 b(elemen)m(t)f(of)g(the)g(com)m(bined)-116
2379 y(closure)34 b(is)g(tagged)g(with)g(the)h(set)g(of)f(source)h(v)m
(ertices)h(whose)g(successor)g(the)f(v)m(ertex)h(is.)49
b(The)35 b(algorithm)-116 2512 y(uses)26 b(a)e(depth-\014rst)h(tra)m(v)
m(ersal)g(for)f(generating)g(an)g(initial)d(represen)m(tation)k(of)f
(the)h(com)m(bined)f(closure.)41 b(The)-116 2646 y(depth-\014rst)31
b(tra)m(v)m(ersal)g(is)f(follo)m(w)m(ed)f(b)m(y)i(a)f(bac)m(kw)m(ard)j
(and)d(a)g(forw)m(ard)h(propagation)d(phase)k(that)e(compute)-116
2780 y(the)38 b(tags)f(asso)s(ciated)g(with)g(the)h(v)m(ertices)h(of)e
(the)h(com)m(bined)f(closure.)58 b(T)-8 b(oroslu)37 b(and)g(Qadah)h
(presen)m(ted)-116 2913 y(p)s(erformance)e(ev)-5 b(aluations)34
b(indicating)g(that)i(their)g(algorithm)d(is)j(more)f(e\016cien)m(t)i
(than)f(the)h(semi-naiv)m(e)-116 3047 y(algorithm)29
b(and)k(Jiang's)f(algorithm)d([73])k(describ)s(ed)g(ab)s(o)m(v)m(e.)30
3187 y(Graph-based)43 b(algorithms)e(cannot)i(b)s(e)g(used)h(to)f(solv)
m(e)g(generalized)g(transitiv)m(e)f(closure)i(problems)-116
3320 y(in)m(v)m(olving)36 b(path)i(computations)f(and)h(aggregation)e
(when)i(the)h(input)e(graphs)h(are)g(cyclic,)h(since)f(strong)-116
3454 y(comp)s(onen)m(t)44 b(detection)f(loses)h(path)g(information.)74
b(If)44 b(the)g(input)f(graphs)i(are)e(acyclic,)j(it)d(is)h(p)s
(ossible)-116 3588 y(to)34 b(adapt)h(graph-based)h(algorithms)c(for)j
(generalized)f(transitiv)m(e)h(closure)g(problems)f([64].)51
b(Y)-8 b(annak)j(akis)-116 3721 y([130)o(])33 b(sho)m(ws)h(ho)m(w)f
(linear)e(recursiv)m(e)j(queries)g(can)e(b)s(e)h(e\016cien)m(tly)g(ev)
-5 b(aluated)32 b(b)m(y)i(graph)e(tra)m(v)m(ersal.)-116
4032 y Fp(Hybrid)k(algorithms)-116 4242 y Fr(The)23 b(h)m(ybrid)f
(transitiv)m(e)g(closure)g(algorithms)e(com)m(bine)h(ideas)h(from)f
(iterativ)m(e,)j(matrix-based,)f(and)g(graph-)-116 4376
y(based)33 b(algorithms.)30 4515 y(Agra)m(w)m(al)25 b(and)h(Jagadish)f
([8])h(presen)m(ted)i(a)d(family)e(of)j(h)m(ybrid)g(algorithms)d(that)i
(compute)h(the)g(conden-)-116 4649 y(sation)32 b(graph)h(of)g(the)g
(input)g(graph)g(and)g(sort)g(it)f(top)s(ologically)d(in)j(the)i
(\014rst)g(pass.)46 b(In)33 b(the)g(second)i(pass,)-116
4783 y(the)i(algorithms)d(compute)j(the)g(transitiv)m(e)g(closure)g(of)
f(the)h(top)s(ologically)c(sorted)k(graph)g(b)m(y)h(a)e(metho)s(d)-116
4916 y(resem)m(bling)f(W)-8 b(arren's)37 b(algorithm.)50
b(Blo)s(c)m(king)35 b(is)h(used)h(in)e(the)h(second)i(pass)f(as)f(in)f
(matrix-based)g(algo-)-116 5050 y(rithms.)42 b(The)32
b(second)h(pass)f(is)f(a)g(breadth-\014rst)i(algorithm,)28
b(whereas)33 b(the)f(graph-based)g(algorithms)d(lik)m(e)-116
5184 y Fd(btc)39 b Fr(describ)s(ed)i(ab)s(o)m(v)m(e)g(are)g
(depth-\014rst)g(algorithms.)63 b(Blo)s(c)m(king)39 b(can)i(b)s(e)f
(used)h(more)f(e\016cien)m(tly)g(with)-116 5317 y(breadth-\014rst)34
b(algorithms)d(than)j(with)f(depth-\014rst)i(algorithms)c([74].)47
b(Note)34 b(ho)m(w)m(ev)m(er,)j(that)c(computing)-116
5451 y(the)42 b(condensation)h(graph)e(in)h(the)g(\014rst)h(pass)g(of)e
(the)i(algorithm)38 b(requires)43 b(depth-\014rst)g(searc)m(h)g(if)e(T)
-8 b(ar-)-116 5584 y(jan's)32 b(algorithm)c([118)o(])k(is)f(used)h(or)g
(a)f(com)m(bination)e(of)i(breadth-\014rst)h(and)g(depth-\014rst)g
(searc)m(h)h(if)d(Jiang's)-116 5718 y(algorithm)f([75])j(is)h(used.)30
5858 y(Jak)m(obson)e([70)o(,)f(71)o(])g(and)g(Dar)e(and)i(Jagadish)f
([33])g(presen)m(ted)j(h)m(ybrid)e(transitiv)m(e)f(closure)h
(algorithms)p eop
28 15 bop -116 -294 a Fr(28)-116 18 y(that)46 b(use)h
Fo(suc)-5 b(c)g(essor)46 b(tr)-5 b(e)g(es)55 b Fr(for)45
b(represen)m(ting)i(the)g(successor)h(sets.)86 b(In)46
b(addition)f(to)g(the)i(v)m(ertices)g(of)-116 152 y(the)35
b(successor)i(set,)g(a)d(successor)j(tree)f(con)m(tains)f(the)g(paths)g
(that)g(w)m(ere)h(used)g(to)f(obtain)e(these)k(v)m(ertices.)-116
286 y(Using)k(the)g(path)h(information)c(the)j(algorithms)e(detect)j(m)
m(ultiple)d(paths)i(b)s(et)m(w)m(een)j(a)d(pair)f(of)h(v)m(ertices)-116
419 y(and)35 b(a)m(v)m(oid)h(adding)e(the)i(same)g(successors)i(t)m
(wice)e(to)f(a)g(successor)j(set.)53 b(W)-8 b(e)36 b(discuss)h(the)e
(successor)j(tree)-116 553 y(represen)m(tation)33 b(more)e(thoroughly)h
(in)g(section)g(4.4.)43 b(The)33 b(algorithm)d(that)i(Jak)m(obson)h
(presen)m(ted)i(in)c([70])-116 686 y(is)45 b(an)h(adaptation)e(of)h
(the)h(semi-naiv)m(e)f(algorithm)d(and)k(the)g(algorithm)c(he)47
b(presen)m(ted)g(in)e([71])h(is)f(an)-116 820 y(adaptation)30
b(of)h(W)-8 b(arshall's)31 b(algorithm.)40 b(The)33 b(algorithm)28
b(that)k(Dar)f(and)h(Jagadish)f(presen)m(ted)j(in)d([33])g(is)-116
954 y(an)h(adaptation)f(of)i(the)g(h)m(ybrid)f(algorithm)e(b)m(y)j
(Agra)m(w)m(al)f(and)h(Jagadish)f([8].)30 1091 y(These)49
b(h)m(ybrid)f(algorithms)c(can)k(b)s(e)f(used)i(to)e(solv)m(e)g
(single-source)g(and)h(m)m(ulti-source)d(transitiv)m(e)-116
1225 y(closure)24 b(problems)g(as)g(w)m(ell)g(as)h(generalized)e
(transitiv)m(e)h(closure)h(problems)e(in)m(v)m(olving)g(path)i
(computations)-116 1359 y(and)32 b(aggregation.)-116
1657 y Fp(P)m(arallel)j(and)j(distributed)e(algorithms)-116
1863 y Fr(Some)25 b(articles)g(discuss)i(the)g(computation)d(of)i(the)g
(transitiv)m(e)g(closure)g(of)f(a)h(database)g(relation)e(in)i
(parallel)-116 1997 y(and)g(distributed)g(en)m(vironmen)m(ts,)i(see)g
([22)o(,)f(25)o(,)g(26)o(,)f(48,)g(49,)g(51,)g(52)o(,)h(53)o(,)g(54)o
(,)f(55,)g(57,)g(76,)g(116)o(,)h(125)o(].)41 b(W)-8 b(e)27
b(do)-116 2130 y(not)f(describ)s(e)h(these)g(articles)f(here,)i(since)f
(w)m(e)g(are)g(only)e(in)m(terested)j(in)d(cen)m(tralized,)j(sequen)m
(tial)e(transitiv)m(e)-116 2264 y(closure)32 b(computation)g(in)f(this)
i(thesis.)-116 2562 y Fp(Comparisons)k(b)s(et)m(w)m(een)h(the)f
(algorithms)-116 2768 y Fr(In)e(the)g(articles)e(describ)s(ed)j(ab)s(o)
m(v)m(e,)g(the)f(comparisons)f(b)s(et)m(w)m(een)i(the)f(algorithms)d
(are)j(mostly)e(based)j(on)-116 2902 y(empirical)f(p)s(erformance)j
(measuremen)m(ts)h(or)f(sim)m(ulations.)58 b(W)-8 b(e)38
b(describ)s(e)h(these)g(p)s(erformance)f(studies)-116
3035 y(b)s(elo)m(w.)30 3173 y(Ioannidis)g([61])h(compared)f(the)i
(logarithmic)35 b(algorithm)h(and)j(the)g(semi-naiv)m(e)f(algorithm)e
(in)i(com-)-116 3307 y(puting)c(the)h(transitiv)m(e)g(closure)g(of)f
(small)f(lists)h(and)h(trees.)51 b(The)36 b(p)s(erformance)e(metrics)h
(w)m(ere)h(disk)f(I/O)-116 3440 y(in)41 b(n)m(um)m(b)s(er)h(of)f(pages)
i(and)f(CPU-time.)70 b(The)43 b(logarithmic)38 b(algorithm)h(w)m(as)k
(more)e(e\016cien)m(t)i(than)e(the)-116 3574 y(semi-naiv)m(e)d
(algorithm)e(in)i(most)h(inputs,)i(b)s(oth)e(in)g(the)g(disk)h(I/O)f
(and)g(in)g(the)g(CPU-time.)63 b(V)-8 b(alduriez)-116
3708 y(and)33 b(Boral)f([124)o(])i(rep)s(orted)f(results)h(indicating)d
(also)h(that)h(logarithmic)d(algorithms)g(are)j(more)g(e\016cien)m(t)
-116 3841 y(than)f(the)h(semi-naiv)m(e)f(algorithm.)30
3979 y(In)40 b(a)g(more)f(recen)m(t)j(study)-8 b(,)43
b(Kabler)c(et)h(al.)64 b([77])40 b(compared)g(the)g(semi-naiv)m(e)f
(algorithm,)g(the)h(loga-)-116 4113 y(rithmic)f(algorithm)g(and)j(the)g
(Blo)s(c)m(k)m(ed)g(W)-8 b(arren)42 b(algorithm,)f(whic)m(h)h(is)g(one)
g(of)f(the)h(W)-8 b(arshall-deriv)m(ed)-116 4246 y(algorithms)38
b([6],)k(in)e(computing)f(the)i(transitiv)m(e)g(closure)f(of)g
(randomly)g(generated)h(trees)h(and)e(graphs.)-116 4380
y(The)h(p)s(erformance)f(metrics)g(w)m(ere)h(disk)g(I/O)f(in)g(n)m(um)m
(b)s(er)h(of)e(pages)i(and)g(an)f(aggregate)g(CPU-time)f(\(a)-116
4513 y(com)m(bination)33 b(of)h(the)h(measured)h(CPU-time)e(plus)h(a)f
(computed)i(CPU-time)e(for)g(the)h(disk)h(op)s(erations\).)-116
4647 y(The)41 b(Blo)s(c)m(k)m(ed)f(W)-8 b(arren)40 b(algorithm)d(w)m
(as)k(usually)e(sup)s(erior)h(to)f(the)i(other)f(t)m(w)m(o)g
(algorithms.)63 b(Con)m(trary)-116 4781 y(to)39 b(the)h(results)f(of)g
(Ioannidis)g([61)o(])h(and)f(V)-8 b(alduriez)39 b(and)g(Boral)f([124)o
(],)k(the)d(semi-naiv)m(e)g(algorithm)d(w)m(as)-116 4914
y(usually)c(sup)s(erior)g(to)g(the)h(logarithmic)c(algorithm.)30
5052 y(Lu)43 b([86])g(compared)f(his)h(impro)m(v)m(ed)g(semi-naiv)m(e)f
(algorithm,)g(the)h(original)d(semi-naiv)m(e)i(algorithm,)-116
5186 y(and)g(the)g(logarithmic)c(algorithm)h(in)i(computing)f(the)i
(transitiv)m(e)g(closure)g(of)f(small)e(lists)i(and)h(binary)-116
5319 y(trees.)57 b(The)37 b(p)s(erformance)g(metric)e(w)m(as)j(disk)f
(I/O)f(in)g(n)m(um)m(b)s(er)i(of)e(tuples.)56 b(The)38
b(metho)s(d)e(of)g(study)i(w)m(as)-116 5453 y(sim)m(ulation,)e(not)h
(direct)g(measuremen)m(t)g(as)h(in)f(the)g(other)h(comparisons)e
(describ)s(ed)i(ab)s(o)m(v)m(e.)59 b(The)38 b(semi-)-116
5586 y(naiv)m(e)27 b(algorithm)d(augmen)m(ted)k(with)e(the)i(impro)m(v)
m(emen)m(ts)f(prop)s(osed)h(b)m(y)g(Lu)g(w)m(as)g(more)e(e\016cien)m(t)
i(than)f(the)-116 5720 y(other)32 b(t)m(w)m(o)i(algorithms.)30
5858 y(Agra)m(w)m(al)k(and)g(Jagadish)g([6])g(compared)g(three)h(W)-8
b(arshall-deriv)m(ed)37 b(algorithms)f(and)j(a)f(logarithmic)p
eop
29 16 bop 3778 -294 a Fr(29)-116 18 y(algorithm)25 b(in)i(computing)g
(the)h(transitiv)m(e)g(closure)g(of)f(randomly)g(generated)i(graphs.)42
b(The)29 b(p)s(erformance)-116 152 y(metric)h(w)m(as)i(disk)g(I/O)f(in)
g(kilob)m(ytes.)43 b(The)32 b(Blo)s(c)m(k)m(ed)g(W)-8
b(arren)32 b(algorithm)c(w)m(as)33 b(the)e(most)g(e\016cien)m(t)h(of)f
(the)-116 286 y(W)-8 b(arshall-deriv)m(ed)31 b(algorithms)f(and)j(it)e
(w)m(as)j(also)d(sup)s(erior)i(to)f(the)h(logarithmic)c(algorithm.)30
433 y(Agra)m(w)m(al)f(et)h(al.)42 b([5)o(])29 b(compared)g(t)m(w)m(o)g
(W)-8 b(arshall-deriv)m(ed)28 b(algorithms)e(and)j(the)g(semi-naiv)m(e)
f(algorithm)-116 566 y(in)34 b(computing)g(the)h(transitiv)m(e)g
(closure,)h(the)f(bill)e(of)h(materials,)f(and)j(the)f(shortest)h
(paths)g(of)e(randomly)-116 700 y(generated)d(graphs.)44
b(The)31 b(p)s(erformance)g(metrics)f(w)m(ere)i(disk)f(I/O)g(in)f(n)m
(um)m(b)s(er)h(of)f(pages)i(and)f(CPU-time.)-116 833
y(The)k(W)-8 b(arshall-deriv)m(ed)34 b(algorithms)e(w)m(ere)k(roughly)e
(equally)g(e\016cien)m(t,)i(but)f(the)g(semi-naiv)m(e)e(algorithm)-116
967 y(w)m(as)g(m)m(uc)m(h)g(slo)m(w)m(er.)30 1114 y(Lu)39
b(et)f(al.)60 b([87)o(])39 b(compared)f(their)g(adaptation)f(of)h(W)-8
b(arren's)39 b(algorithm)c(with)j(t)m(w)m(o)h(v)m(ersions)h(of)d(the)
-116 1248 y(logarithmic)e(algorithm)h(in)j(computing)f(the)h(transitiv)
m(e)g(closure.)63 b(The)40 b(p)s(erformance)f(metric)f(w)m(as)i(the)
-116 1381 y(execution)32 b(time.)42 b(No)31 b(measuremen)m(ts)i(w)m
(ere)g(done,)f(instead)g(the)g(p)s(erformance)f(metrics)g(w)m(ere)i(ev)
-5 b(aluated)-116 1515 y(using)39 b(analytic)f(form)m(ulas.)63
b(Inputs)41 b(and)f(outputs)g(w)m(ere)h(c)m(haracterized)g(using)e(the)
h(size)g(of)f(the)h(source)-116 1649 y(relation)d(and)h(the)i(output)e
(relation,)h(selectivit)m(y)g(of)f(join)f(op)s(erations,)j(and)f(the)g
(n)m(um)m(b)s(er)g(of)f(iterations)-116 1782 y(as)33
b(parameters.)45 b(The)34 b(adapted)f(W)-8 b(arren's)34
b(algorithm)c(w)m(as)k(more)e(e\016cien)m(t)i(than)f(the)g(other)h
(algorithms)-116 1916 y(when)e(the)f(main)f(memory)g(w)m(as)i(not)e(m)m
(uc)m(h)i(smaller)d(than)i(the)g(input)g(relation)e(and)i(the)h(path)f
(lengths)g(in)-116 2049 y(the)i(inputs)f(v)-5 b(aried)32
b(greatly)-8 b(.)43 b(Otherwise,)33 b(the)g(logarithmic)c(algorithms)h
(w)m(ere)k(more)e(e\016cien)m(t.)30 2196 y(Agra)m(w)m(al)45
b(and)h(Jagadish)f([8])h(compared)f(their)h(h)m(ybrid)g(algorithm)c
(with)k(a)f(W)-8 b(arshall-deriv)m(ed)45 b(al-)-116 2330
y(gorithm,)d(a)f(graph-based)h(algorithm)d(presen)m(ted)44
b(in)d([62)o(])h(and)g(the)g(Grid)e(algorithm)f(b)m(y)k(Ullman)c(and)
-116 2464 y(Y)-8 b(annak)j(akis)28 b([122)o(])h(in)e(computing)g(the)i
(bill)d(of)i(materials)e(of)i(randomly)f(generated)i(acyclic)f(graphs.)
42 b(The)-116 2597 y(p)s(erformance)31 b(metric)f(w)m(as)j(disk)e(I/O)h
(in)e(n)m(um)m(b)s(er)i(of)f(tuples.)44 b(The)32 b(h)m(ybrid)g
(algorithm)c(w)m(as)33 b(in)d(all)g(inputs)-116 2731
y(more)i(e\016cien)m(t)h(than)g(the)g(other)f(algorithms.)30
2878 y(Ioannidis)46 b(et)h(al.)85 b([63)o(,)47 b(64])f(compared)h
(their)f(graph-based)h(algorithms)d Fd(btc)i Fr(and)h
Fd(gdftc)g Fr(with)-116 3012 y(Sc)m(hmitz's)32 b(graph-based)h
(algorithm)c([105])j(in)g(computing)f(the)i(transitiv)m(e)f(closure)h
(of)f(randomly)f(gener-)-116 3145 y(ated)24 b(graphs.)42
b(The)25 b(p)s(erformance)f(metrics)g(w)m(ere)i(disk)e(I/O)g(in)g
(kilob)m(ytes)h(and)f(an)h(aggregated)f(CPU-time.)-116
3279 y(Algorithm)30 b Fd(btc)i Fr(w)m(as)h(in)f(most)g(inputs)h(more)e
(e\016cien)m(t)j(than)e(the)h(other)g(t)m(w)m(o)g(algorithms.)30
3426 y(Dar)h(and)h(Jagadish)g([33)o(])g(compared)g(their)f(spanning)h
(tree)h(transitiv)m(e)e(closure)h(algorithm)d(with)i(the)-116
3559 y(h)m(ybrid)29 b(algorithm)d(b)m(y)k(Agra)m(w)m(al)f(and)g
(Jagadish)f([8])h(in)f(computing)g(the)i(transitiv)m(e)e(closure)i(of)e
(randomly)-116 3693 y(generated)42 b(acyclic)g(graphs.)72
b(The)42 b(p)s(erformance)g(metric)f(w)m(as)i(disk)f(I/O)f(in)h(n)m(um)
m(b)s(er)g(of)f(tuples.)72 b(The)-116 3827 y(spanning)26
b(tree)h(algorithm)d(w)m(as)j(more)f(e\016cien)m(t)h(than)g(the)g(h)m
(ybrid)g(algorithm)c(b)m(y)28 b(Agra)m(w)m(al)e(and)g(Jagadish)-116
3960 y(in)32 b(all)e(inputs.)30 4107 y(Dar)h(and)g(Ramakrishnan)f([31,)
h(34])g(compared)h(sev)m(eral)g(algorithms)c(in)j(computing)f(full)g
(and)h(partial)-116 4241 y(transitiv)m(e)22 b(closures)i(of)f(randomly)
e(generated)j(acyclic)f(graphs.)41 b(The)24 b(algorithms)c(w)m(ere)k
Fd(btc)f Fr(b)m(y)h(Ioannidis)-116 4375 y(et)35 b(al.)51
b([63,)36 b(64)o(],)g(the)g(h)m(ybrid)g(algorithm)c(b)m(y)37
b(Agra)m(w)m(al)e(and)g(Jagadish)g([8],)h(Jiang's)f(algorithm)d([73],)k
(the)-116 4508 y(spanning)c(tree)h(algorithm)d(b)m(y)j(Dar)f(and)h
(Jagadish)e([33],)i(and)f(t)m(w)m(o)i(algorithms)c(b)m(y)j(Jak)m(obson)
h([71)o(].)44 b(The)-116 4642 y(main)39 b(p)s(erformance)i(metric)g(w)m
(as)h(disk)f(I/O)g(in)g(n)m(um)m(b)s(er)h(of)f(pages.)70
b(The)42 b(h)m(ybrid)g(algorithm)c(and)j(the)-116 4775
y(spanning)29 b(tree)g(algorithm)d(w)m(ere)31 b(less)e(e\016cien)m(t)h
(than)g(the)f(other)h(algorithms.)39 b(The)30 b(relativ)m(e)f
(e\016ciency)h(of)-116 4909 y(the)i(algorithms)e(v)-5
b(aried)32 b(in)f(di\013eren)m(t)i(inputs)f(and)g(no)h(algorithm)c(w)m
(as)k(generally)e(sup)s(erior)h(to)g(the)h(other)-116
5043 y(algorithms.)62 b(In)40 b(addition)e(to)h(measuring)g(disk)h(I/O)
g(in)f(n)m(um)m(b)s(er)h(of)f(pages,)j(Dar)d(and)h(Ramakrishnan)-116
5176 y(measured)32 b(disk)g(I/O)g(in)f(n)m(um)m(b)s(er)h(of)f(tuples)h
(and)g(successor)i(lists,)d(and)h(the)g(total)f(n)m(um)m(b)s(er)h(of)f
(generated)-116 5310 y(tuples.)43 b(They)34 b(detected)h(that)d(none)h
(of)f(these)i(other)f(metrics)f(reliably)e(predicted)j(disk)g(I/O)g(in)
e(pages.)30 5457 y(T)-8 b(o)35 b(summarize,)f(the)i(p)s(erformance)e
(studies)i(discussed)g(ab)s(o)m(v)m(e)g(do)f(not)f(giv)m(e)h(a)g(clear)
f(picture)h(of)f(the)-116 5591 y(relativ)m(e)f(e\016ciency)j(of)d(the)i
(algorithms.)45 b(In)34 b(most)g(of)f(the)i(studies,)g(the)f(iterativ)m
(e)g(algorithms)d(w)m(ere)k(less)-116 5724 y(e\016cien)m(t)c(than)f
(the)h(matrix-based)e(algorithms,)g(and)h(the)h(matrix-based)e
(algorithms)f(w)m(ere)j(less)g(e\016cien)m(t)-116 5858
y(than)h(graph-based)h(and)g(h)m(ybrid)g(algorithms.)p
eop
30 17 bop -116 -294 a Fr(30)30 18 y(Note)47 b(that)g(all)e(these)j
(studies)g(are)f(p)s(o)s(or)f(p)s(erformance)h(ev)-5
b(aluation)45 b(studies.)88 b(The)48 b(system)g(that)-116
152 y(w)m(as)36 b(ev)-5 b(aluated)34 b(and)h(the)h(goal)d(of)i(the)g
(study)h(w)m(ere)h(not)e(prop)s(erly)f(explained.)51
b(All)33 b(system)j(parameters)-116 286 y(a\013ecting)29
b(the)g(p)s(erformance)g(w)m(ere)i(not)e(iden)m(ti\014ed,)h(and)g(the)g
(most)f(imp)s(ortan)m(t)e(system)j(parameters,)h(lik)m(e)-116
419 y(the)i(size)h(of)e(the)i(main)d(memory)h(and)h(the)h(n)m(um)m(b)s
(er)f(of)g(bu\013er)h(pages,)g(w)m(ere)g(in)e(most)h(studies)h(not)e(v)
-5 b(aried)-116 553 y(to)32 b(\014nd)h(out)g(their)f(e\013ect)h(on)f
(the)h(p)s(erformance.)30 689 y(The)39 b(most)f(sev)m(ere)i(problems)e
(in)g(these)h(studies)g(w)m(ere)h(in)d(the)i(selection)f(of)g(the)g
(inputs)h(and)f(in)f(the)-116 823 y(analysis)f(of)g(the)h(measuremen)m
(t)h(data.)55 b(In)38 b(some)e(studies,)j(only)d(trees)i(and)f(lists)f
(w)m(ere)i(used)g(as)f(inputs;)-116 956 y(in)32 b(all)f(studies,)j(the)
f(inputs)g(w)m(ere)i(small.)42 b(The)34 b(random)e(nature)h(of)g(the)g
(inputs)g(w)m(as)h(not)f(understo)s(o)s(d)h(in)-116 1090
y(an)m(y)39 b(study)-8 b(.)63 b(F)-8 b(or)38 b(eac)m(h)h(com)m
(bination)e(of)h(input)g(parameters,)i(only)e(a)h(couple)f(of)g(random)
g(inputs)h(w)m(ere)-116 1224 y(generated.)k(The)30 b(v)-5
b(ariabilit)m(y)26 b(of)j(the)h(results)g(that)f(is)g(una)m(v)m
(oidable)g(when)h(random)f(inputs)g(are)g(used)i(w)m(as)-116
1357 y(not)h(considered)g(in)g(an)m(y)g(of)g(these)h(studies.)44
b(Th)m(us,)34 b(the)e(studies)h(ga)m(v)m(e)g(no)f(information)c(on)k
(the)h(accuracy)-116 1491 y(of)f(the)h(results.)30 1627
y(Although)40 b(the)g(input)g(graphs)h(usually)e(had)i(only)e(a)h(few)h
(h)m(undred)h(v)m(ertices,)h(the)e(n)m(um)m(b)s(er)g(of)f(disk)-116
1761 y(I/O)g(op)s(erations)g(w)m(as)i(large,)g(whic)m(h)f(indicates)f
(that)h(eac)m(h)g(page)g(w)m(as)h(mo)m(v)m(ed)f(sev)m(eral)h(times)e(b)
s(et)m(w)m(een)-116 1894 y(the)c(main)f(memory)g(and)h(the)g(disk.)54
b(The)37 b(studies)g(did)f(not)g(answ)m(er)h(the)f(question)h(of)f
(what)g(happ)s(ens)h(if)-116 2028 y(real-life)29 b(databases)34
b(are)e(used)i(as)f(inputs.)-116 2350 y Fc(2.3.5)136
b(Represen)l(tations)47 b(and)e(dynamic)g(up)t(dates)-116
2553 y Fr(Most)37 b(of)g(the)h(transitiv)m(e)e(closure)i(algorithms)c
(describ)s(ed)k(ab)s(o)m(v)m(e)g(use)g(adjacency)h(lists,)e(adjacency)h
(ma-)-116 2687 y(trices,)31 b(or)f(relation)e(tables)i(to)g(represen)m
(t)i(the)f(closure.)43 b(Ho)m(w)m(ev)m(er,)33 b(some)d(algorithms)e
(that)i(w)m(e)h(describ)s(ed)-116 2821 y(use)h(sp)s(ecial)f(represen)m
(tations)i(to)e(sp)s(eed)i(up)f(the)h(computation.)41
b(Simon's)31 b(transitiv)m(e)g(closure)h(algorithm)-116
2954 y([111)o(,)d(112)o(])g(for)g(acyclic)f(graphs)h(obtains)f(a)h
(small)e(w)m(orst-case)j(time)d(b)m(y)j(using)f(the)g(c)m(hain)g
(decomp)s(osition,)-116 3088 y(whic)m(h)d(sp)s(eeds)i(up)e(union)f(op)s
(erations.)40 b(The)27 b(h)m(ybrid)f(algorithms)e(b)m(y)i(Dar)f(and)h
(Jagadish)f([33])h(and)g(Jak)m(ob-)-116 3221 y(son)h([70)o(,)g(71)o(])g
(use)g(the)g(successor)i(tree)e(represen)m(tation,)h(whic)m(h)f(aims)e
(at)h(a)m(v)m(oiding)f(unnecessary)k(successor)-116 3355
y(set)g(op)s(erations.)41 b(In)28 b(this)g(subsection,)i(w)m(e)g(study)
f(other)g(sp)s(ecial)e(represen)m(tations)i(for)f(transitiv)m(e)g
(closure.)30 3491 y(Sp)s(ecial)e(data)g(represen)m(tations)j(for)d
(transitiv)m(e)h(closure)g(computation)e(ha)m(v)m(e)j(b)s(een)g
(designed)g(for)e(b)s(oth)-116 3625 y(main)34 b(memory)h(and)g(a)h
(database)g(en)m(vironmen)m(t.)53 b(In)36 b(main)e(memory)h(represen)m
(tations,)j(the)e(goals)f(ha)m(v)m(e)-116 3759 y(b)s(een)43
b(to)e(sp)s(eed)j(up)e(successor)j(set)d(op)s(erations)g(and)g(to)g(a)m
(v)m(oid)f(redundan)m(t)j(op)s(erations.)71 b(In)42 b(database)-116
3892 y(represen)m(tations,)30 b(the)f(goals)e(ha)m(v)m(e)j(b)s(een)f
(to)f(sp)s(eed)h(up)g(the)g(tra)m(v)m(ersal)f(of)g(the)h(input)f(graph)
g(b)m(y)h(sp)s(ecial)e(\014le)-116 4026 y(structures)33
b(and)f(to)g(materialize)c(the)k(transitiv)m(e)g(closure,)g(i.e.,)f(to)
h(store)g(the)g(computed)g(closure)g(so)g(that)-116 4160
y(queries)40 b(ab)s(out)f(connectivit)m(y)h(of)e(v)m(ertices)j(can)f(b)
s(e)f(e\016cien)m(tly)h(ev)-5 b(aluated.)63 b(Dynamic)38
b(main)m(tenance)h(of)-116 4293 y(the)29 b(represen)m(tation,)i(when)f
(edges)g(are)f(inserted)h(to)f(the)g(input)g(graph)g(or)f(deleted)i
(from)e(it,)g(is)h(asso)s(ciated)-116 4427 y(with)j(b)s(oth)g(main)f
(memory)h(and)g(database)h(represen)m(tations.)30 4563
y(W)-8 b(e)28 b(study)h(\014rst)f(ho)m(w)g(the)f(transitiv)m(e)g
(closure)h(can)g(b)s(e)f(dynamically)f(main)m(tained)f(in)i(a)g(main)f
(memory)-116 4697 y(en)m(vironmen)m(t.)60 b(Next,)41
b(w)m(e)e(study)g(sp)s(ecial)e(\014le)h(structures)i(that)e(sp)s(eed)h
(up)f(the)h(tra)m(v)m(ersal)f(of)g(the)g(input)-116 4830
y(graph)43 b(in)g(a)g(database)h(en)m(vironmen)m(t.)77
b(Finally)-8 b(,)44 b(w)m(e)h(study)f(transitiv)m(e)g(closure)f
(materialization)c(in)k(a)-116 4964 y(database)33 b(en)m(vironmen)m(t.)
-116 5254 y Fp(Dynamic)j(up)s(dates)j(in)e(main)f(memory)-116
5457 y Fr(Ibaraki)c(and)i(Katoh)e([58])h(presen)m(ted)i(in)e(their)f
(seminal)g(article,)f(algorithms)g(for)h(the)i(dynamic)e(main)m(te-)
-116 5591 y(nance)g(of)f(transitiv)m(e)g(closure)h(when)h(edges)g(are)e
(inserted)h(to)g(the)g(input)f(graph)g(or)g(deleted)h(from)f(it.)42
b(The)-116 5724 y(algorithms)26 b(use)j(no)g(sp)s(ecial)e(data)i
(structures;)i(the)e(transitiv)m(e)g(closure)f(is)g(represen)m(ted)k(b)
m(y)d(an)g(adjacency)-116 5858 y(matrix.)51 b(The)36
b(algorithm)d(that)i(up)s(dates)i(the)f(closure)f(b)s(et)m(w)m(een)j
(edge)e(insertions)f(requires)i Fn(O)s Fr(\()p Fn(n)3574
5822 y Fi(2)3613 5858 y Fr(\))e(time)p eop
31 18 bop 3778 -294 a Fr(31)-116 18 y(in)40 b(the)i(w)m(orst)g(case)g
(to)f(pro)s(cess)i(one)e(edge)h(insertion,)h(but)e(only)g
Fn(O)s Fr(\()p Fn(ne)2634 -18 y Fi(+)2693 18 y Fr(\))g(time)f(in)g(the)
i(w)m(orst)g(case)g(to)-116 152 y(pro)s(cess)d Fn(e)g
Fr(edge)f(insertions.)60 b(This)39 b(is)e(a)h(t)m(ypical)g(prop)s(ert)m
(y)h(of)e(algorithms)f(for)i(dynamic)f(main)m(tenance)-116
286 y(of)d(transitiv)m(e)h(closures:)50 b(the)35 b(w)m(orst-case)i
(time)c(to)i(pro)s(cess)i(one)e(edge)h(insertion)e(or)h(deletion)f(is)h
(greater)-116 419 y(than)d(the)h(amortized)e(time)g([120)o(])i(o)m(v)m
(er)g(a)f(sequence)k(of)31 b(sev)m(eral)j(insertions)d(or)i(deletions.)
42 b(Ibaraki's)33 b(and)-116 553 y(Katoh's)d(algorithm)d(that)i(up)s
(dates)i(the)g(closure)f(b)s(et)m(w)m(een)i(edge)f(deletions)e
(requires)i Fn(O)s Fr(\(\()p Fn(n)16 b Fr(+)h Fn(e)p
Fr(\))p Fn(e)3559 517 y Fi(+)3618 553 y Fr(\))30 b(time)-116
686 y(in)i(the)h(w)m(orst)g(case)g(to)g(pro)s(cess)g
Fn(e)g Fr(deletions.)30 822 y(Italiano)26 b([65])i(sho)m(w)m(ed)i(that)
e(faster)g(up)s(dating)f(b)s(et)m(w)m(een)k(edge)d(insertions)g(is)g(p)
s(ossible)f(if)g(a)h(sp)s(ecialized)-116 956 y(data)37
b(structure)h(is)f(used.)58 b(The)39 b(data)d(structure)j(con)m(tains)e
(the)h(successor)h(sets)g(organized)d(as)i(a)f(tree)g(of)-116
1089 y(paths)25 b(and)h(an)f Fn(n)7 b Fm(\002)g Fn(n)26
b Fr(matrix)e(of)h(p)s(oin)m(ters)g(p)s(oin)m(ting)e(to)i(the)h(tree.)
41 b(The)26 b(data)f(structure)i(mak)m(es)e(it)g(p)s(ossible)-116
1223 y(to)39 b(up)s(date)h(the)g(closure)g(b)s(et)m(w)m(een)i
Fn(e)e Fr(consecutiv)m(e)i(edge)e(insertions)f(in)g Fn(O)s
Fr(\()p Fn(ne)p Fr(\))h(w)m(orst-case)h(time.)63 b(It)40
b(is)-116 1357 y(also)28 b(p)s(ossible)h(to)g(return)h(a)f(path)h
(connecting)f(t)m(w)m(o)h(v)m(ertices)h(in)e(time)f(prop)s(ortional)f
(to)i(the)h(length)e(of)h(the)-116 1490 y(path.)64 b(Buc)m(hsbaum)40
b(et)g(al.)63 b([21)o(])40 b(extended)h(Italiano's)d(results)i(to)f
(edge)h(lab)s(eled)e(graphs.)64 b(In)40 b(another)-116
1624 y(pap)s(er,)29 b(Italiano)d([66)o(])i(sho)m(w)m(ed)i(that)e(the)g
(closure)h(of)e(an)h(acyclic)f(graph)h(can)g(b)s(e)h(up)s(dated)f(b)s
(et)m(w)m(een)i Fn(e)e Fr(edge)-116 1757 y(deletions)k(in)g
Fn(O)s Fr(\()p Fn(ne)p Fr(\))g(w)m(orst-case)i(time)d(when)i(a)g(mo)s
(di\014ed)e(v)m(ersion)i(of)f(the)h(data)f(structure)i(is)e(used.)30
1893 y(La)k(P)m(outr)m(\023)-46 b(e)38 b(and)f(v)-5 b(an)36
b(Leeu)m(w)m(en)j([81])d(studied)h(the)g(dynamic)f(main)m(tenance)h(of)
f(b)s(oth)g(the)h(transitiv)m(e)-116 2027 y(reduction)42
b(and)h(the)g(transitiv)m(e)f(closure)h(of)f(a)g(graph)g(b)s(et)m(w)m
(een)j(edge)e(insertions)f(or)h(deletions.)72 b(They)-116
2160 y(presen)m(ted)33 b(algorithms)28 b(and)j(data)g(structures)h
(that)f(resem)m(ble)g(those)h(b)m(y)g(Italiano.)40 b(The)32
b(algorithm)c(that)-116 2294 y(pro)s(cesses)j(edge)e(insertions)f(has)h
(the)h(same)e(w)m(orst-case)i(time)e Fn(O)s Fr(\()p Fn(ne)p
Fr(\))g(as)h(Italiano's)e(insertion)h(algorithm.)-116
2427 y(The)k(algorithm)c(that)j(pro)s(cesses)i(edge)f(deletions)e(has)i
(the)g(same)f(w)m(orst-case)h(b)s(ound)f(as)h(Italiano's)d(dele-)-116
2561 y(tion)34 b(algorithm)e(when)k(the)g(inputs)f(are)g(acyclic.)51
b(Unlik)m(e)35 b(Italiano's)e(algorithm,)g(La)i(P)m(outr)m(\023)-46
b(e's)37 b(and)e(v)-5 b(an)-116 2695 y(Leeu)m(w)m(en's)42
b(algorithm)37 b(can)j(also)e(pro)s(cess)j(deletions)e(in)g(cyclic)h
(graphs;)j(the)d(w)m(orst-case)h(time)d(of)h(pro-)-116
2828 y(cessing)33 b Fn(e)g Fr(deletions)f(is)g(sligh)m(tly)f(greater)h
(than)h Fn(O)s Fr(\()p Fn(ne)p Fr(\).)30 2964 y(Y)-8
b(ellin)23 b([131)o(])i(presen)m(ted)i(algorithms)c(and)i(data)f
(structures)j(similar)22 b(to)i(those)i(b)m(y)g(Italiano,)e(La)h(P)m
(outr)m(\023)-46 b(e)-116 3097 y(and)35 b(v)-5 b(an)35
b(Leeu)m(w)m(en.)54 b(Also)34 b(Y)-8 b(ellin's)34 b(algorithms)e(ha)m
(v)m(e)37 b(the)e Fn(O)s Fr(\()p Fn(ne)p Fr(\))g(w)m(orst-case)h(time)e
(b)s(ound.)51 b(Ho)m(w)m(ev)m(er,)-116 3231 y(Y)-8 b(ellin)29
b(sho)m(w)m(ed)34 b(that)d(if)f(the)i(outdegree)g(of)f(the)h(graph)g
(is)f(b)s(ounded)h(b)m(y)g Fn(d)p Fr(,)g(his)f(algorithms)e(ha)m(v)m(e)
k(another)-116 3365 y(w)m(orst-case)h(b)s(ound)g Fn(O)s
Fr(\()p Fn(de)868 3329 y Fi(+)926 3365 y Fr(\),)f(whic)m(h)h(is)f
(optimal)d(for)j(b)s(ounded)h(degree)g(graphs.)46 b(The)34
b(other)g(algorithms)-116 3498 y([58)o(,)f(65,)f(66,)g(81])h(do)f(not)g
(ha)m(v)m(e)i(this)f(b)s(ound.)-116 3783 y Fp(Sp)s(ecial)j(represen)m
(tations)i(for)f(supp)s(orting)g(graph)i(tra)m(v)m(ersal)e(in)f
(databases)-116 3985 y Fr(When)d(the)f(input)g(graph)f(resides)i(in)e
(the)i(disk,)f(the)h(paging)d(caused)k(b)m(y)f(the)f(tra)m(v)m(ersal)g
(of)g(the)g(input)g(is)f(a)-116 4119 y(b)s(ottlenec)m(k)j(of)g(the)g
(computation.)47 b(The)35 b(order)f(in)f(whic)m(h)h(the)h(graph)f(is)f
(stored)i(in)e(the)h(disk)h(a\013ects)f(the)-116 4252
y(p)s(erformance.)53 b(A)35 b(random)g(order)h(causes)i(the)e(read)g
(and)g(write)f(heads)i(of)e(the)i(disk)f(to)f(skip)h(randomly)-8
b(.)-116 4386 y(If)29 b(the)g(graph)g(do)s(es)h(not)f(\014t)g(in)m(to)f
(the)h(main)f(memory)-8 b(,)29 b(eac)m(h)h(page)f(ma)m(y)f(b)s(e)i(mo)m
(v)m(ed)f(man)m(y)g(times)g(from)e(the)-116 4520 y(disk)33
b(to)f(the)h(main)e(memory)-8 b(.)30 4655 y(Larson)41
b(and)h(Deshpande)g([82)o(])g(presen)m(ted)h(a)e(simple)e(\014le)i
(structure)i(for)d(supp)s(orting)h(tra)m(v)m(ersal)g(re-)-116
4789 y(cursion)35 b([103])g(in)g(acyclic)g(graphs.)53
b(The)37 b(v)m(ertices)g(and)e(the)i(edges)f(ma)m(y)g(ha)m(v)m(e)h(lab)
s(els,)e(p)s(ermitting)e(path)-116 4922 y(computations.)41
b(The)29 b(represen)m(tation)g(consists)g(of)f(t)m(w)m(o)h(\014les:)41
b(a)28 b(main)f(\014le)h(and)g(an)g(index)h(\014le.)41
b(The)30 b(main)-116 5056 y(\014le)36 b(con)m(tains)g(one)h(record)f(p)
s(er)h(eac)m(h)g(v)m(ertex.)57 b(The)37 b(record)g(con)m(tains)f(the)h
(lab)s(el)d(of)i(the)h(v)m(ertex)h(and)e(the)-116 5190
y(successors)g(and)d(predecessors)j(of)d(the)g(v)m(ertex.)47
b(The)35 b(successors)h(and)d(predecessors)j(are)d(represen)m(ted)j(as)
-116 5323 y(v)m(ertex-lab)s(el)f(pairs.)53 b(The)37 b(records)g(are)f
(sorted)h(in)e(a)h(top)s(ological)c(order)k(and)g(stored)h(in)e(a)h
(B-tree.)54 b(The)-116 5457 y(top)s(ological)23 b(order)k(of)g(the)g
(records)h(enables)f(\014nding)g(all)e(successors)30
b(or)c(predecessors)k(of)d(a)f(set)i(of)f(v)m(ertices)-116
5591 y(in)34 b(a)g(single)g(scan)h(o)m(v)m(er)h(the)f(main)e(\014le.)49
b(The)36 b(index)e(\014le)h(maps)f(the)h(v)m(ertex)h(names)f(to)f
(their)h(top)s(ological)-116 5724 y(order)40 b(k)m(eys,)k(whic)m(h)d
(are)f(used)h(to)f(lo)s(cate)f(the)h(records)h(in)f(the)g(B-tree.)66
b(Larson)40 b(and)h(Deshpande)g(pre-)-116 5858 y(sen)m(ted)33
b(algorithms)c(for)i(up)s(dating)f(the)i(\014le)f(structures)i(when)g
(v)m(ertices)g(or)e(edges)i(are)e(inserted,)h(deleted,)p
eop
32 19 bop -116 -294 a Fr(32)-116 18 y(or)24 b(mo)s(di\014ed.)40
b(Adding)25 b(an)g(edge)g(is)g(the)g(only)g(op)s(eration)f(that)g(ma)m
(y)h(render)h(the)g(top)s(ological)21 b(order)k(in)m(v)-5
b(alid)-116 152 y(and)30 b(force)f(a)h(rearrangemen)m(t)f(of)h(some)f
(records)i(in)e(the)h(main)e(\014le.)42 b(The)30 b(other)g(main)m
(tenance)g(op)s(erations)-116 286 y(are)i(simple)f(and)i(fast.)30
421 y(The)f(graph)f(tra)m(v)m(ersal)g(algorithm)d(that)j(Larson)g(and)g
(Deshpande)h(presen)m(ted)h(uses)g(a)e(priorit)m(y)e(queue)-116
555 y(to)37 b(manage)g(the)h(v)m(ertices)i(to)d(b)s(e)h(visited.)59
b(If)38 b(the)g(outdegrees)h(of)f(the)g(v)m(ertices)h(are)f(large,)g
(the)g(priorit)m(y)-116 688 y(queue)h(ma)m(y)e(b)s(e)h(to)s(o)f(large)g
(to)g(\014t)h(in)m(to)f(the)h(main)e(memory)g(and)i(the)g(queue)h
(managemen)m(t)e(ma)m(y)h(cause)-116 822 y(m)m(uc)m(h)29
b(disk)f(I/O.)g(Hua)h(et)f(al.)41 b([56])28 b(presen)m(ted)j(a)d
(similar)d(\014le)j(structure,)i(called)d Fo(c)-5 b(onne)g(ctivity)31
b(index)p Fr(,)d(that)-116 956 y(also)37 b(enables)h(graph)g(tra)m(v)m
(ersal)h(during)e(a)h(single)f(scan)i(o)m(v)m(er)g(the)f(\014le.)60
b(Ho)m(w)m(ev)m(er,)42 b(the)c(tra)m(v)m(ersal)h(of)e(the)-116
1089 y(connectivit)m(y)32 b(index)g(is)f(con)m(trolled)g(b)m(y)i(a)e
(simple)f(FIF)m(O)i(\(\014rst)g(in,)f(\014rst)i(out\))e(queue)i(that)f
(is)f(m)m(uc)m(h)i(more)-116 1223 y(e\016cien)m(t)g(in)f(disk)h(I/O)f
(than)h(the)g(priorit)m(y)e(queue.)30 1358 y(Agra)m(w)m(al)24
b(and)h(Kiernan)f([9])h(presen)m(ted)i(a)d(\014le)g(structure,)k
(called)c(the)h Fo(tr)-5 b(aversal)27 b(index)p Fr(,)f(that)e(resem)m
(bles)-116 1492 y(those)39 b(of)g(Larson)g(and)g(Deshpande)h(and)f(Hua)
g(et)h(al.)61 b(except)41 b(that)e(it)f(tolerates)g(cyclic)h(input)f
(graphs.)-116 1626 y(The)32 b(tra)m(v)m(ersal)f(index)g(is)f(k)m(ept)i
(in)e(a)h(top)s(ological)c(order)k(if)f(the)h(input)g(graph)f(is)h
(acyclic)f(and)h(in)f(a)h(relaxed)-116 1759 y(top)s(ological)26
b(order)k(if)f(the)h(input)g(graph)f(is)h(cyclic.)42
b(Agra)m(w)m(al)29 b(and)h(Kiernan)g(presen)m(ted)i(an)e(algorithm)c
(for)-116 1893 y(creating)37 b(the)h(tra)m(v)m(ersal)h(index)f(and)g
(algorithms)d(for)j(main)m(taining)c(the)39 b(index)f(when)h(the)f
(input)g(graph)-116 2027 y(is)i(c)m(hanged)i(and)e(sho)m(w)m(ed)j(ho)m
(w)e(the)g(input)f(graph)h(can)f(b)s(e)h(tra)m(v)m(ersed)i(during)d(a)g
(single)f(scan)j(o)m(v)m(er)f(the)-116 2160 y(tra)m(v)m(ersal)33
b(index.)-116 2445 y Fp(Sp)s(ecial)j(represen)m(tations)i(for)f
(materializing)d(transitiv)m(e)i(closure)h(in)f(databases)-116
2647 y Fr(Jagadish)30 b([67)o(])h(studied)g(the)f(c)m(hain)h(decomp)s
(osition)d(as)j(a)f(w)m(a)m(y)i(to)e(materialize)d(transitiv)m(e)j
(closures.)44 b(The)-116 2781 y(di\013erence)34 b(from)e(Simon's)g
(represen)m(tation)j(is)e(that)g(Jagadish)g(represen)m(ted)i(a)f
(successor)h(set)f Fn(S)40 b Fr(as)33 b(a)g(list)-116
2914 y(of)41 b(pairs)f(\()p Fn(C)359 2929 y Fj(i)387
2914 y Fn(;)17 b(v)478 2929 y Fj(i)506 2914 y Fr(\),)44
b(where)e Fn(C)975 2929 y Fj(i)1045 2914 y Fr(is)e(a)i(c)m(hain)f(and)g
Fn(v)1753 2929 y Fj(i)1823 2914 y Fr(is)g(the)g(top)s(ologically)d
(smallest)h(elemen)m(t)j(of)e Fn(S)34 b Fm(\\)29 b Fn(C)3821
2929 y Fj(i)3849 2914 y Fr(.)-116 3048 y(Simon)e(represen)m(ted)32
b Fn(S)j Fr(as)29 b(a)g Fn(k)j Fr(elemen)m(t)d(v)m(ector)i([)p
Fn(v)1786 3063 y Fi(1)1825 3048 y Fn(;)17 b(v)1916 3063
y Fi(2)1956 3048 y Fn(;)g(:)g(:)g(:)e(;)i(v)2221 3063
y Fj(k)2264 3048 y Fr(])29 b(where)i Fn(v)2646 3063 y
Fj(i)2703 3048 y Fr(is)e(the)g(top)s(ologically)c(smallest)-116
3181 y(elemen)m(t)39 b(of)g Fn(S)32 b Fm(\\)c Fn(C)625
3196 y Fj(i)653 3181 y Fr(.)63 b(Th)m(us,)43 b(the)d(time)e(needed)j
(to)e(union)f(t)m(w)m(o)j(successor)g(sets)g(ma)m(y)e(b)s(e)g(smaller)f
(than)-116 3315 y(\012\()p Fn(k)s Fr(\))f(in)f(Jagadish's)h(represen)m
(tation,)h(but)f(inserting)f(a)g(v)m(ertex)j(in)m(to)d(a)g(successor)k
(set)d(and)g(testing)f(the)-116 3449 y(presence)f(of)d(a)g(v)m(ertex)i
(in)e(a)g(set)i(require)f(\012\()p Fn(k)s Fr(\))f(time)g(in)f(the)i(w)m
(orst)h(case.)30 3584 y(Jagadish)44 b(sho)m(w)m(ed)i(that)e(\014nding)g
(an)g(optimal)d(c)m(hain)j(decomp)s(osition)f(for)g(an)i(acyclic)e
(graph)h(is)g(a)-116 3718 y(minim)m(um)25 b(\015o)m(w)30
b(problem.)41 b(He)30 b(then)f(presen)m(ted)i(sev)m(eral)f(heuristics)f
(for)g(computing)e(the)j(decomp)s(osition)-116 3852 y(and)44
b(compared)f(them)h(empirically)-8 b(.)74 b(The)45 b(tests)g(indicated)
e(that)h(a)f(decomp)s(osition)f(metho)s(d)i(that)f(is)-116
3985 y(based)29 b(on)f(top)s(ological)c(ordering)j(yields)h(the)h
(smallest)d(n)m(um)m(b)s(er)j(of)e(c)m(hains.)43 b(This)28
b(is)f(exactly)i(the)f(metho)s(d)-116 4119 y(that)i(Simon)e([111,)i
(112)o(])h(prop)s(osed,)g(but)f(Jagadish)g(did)g(not)g(directly)f
(refer)i(to)f(Simon's)f(w)m(ork.)43 b(Jagadish)-116 4252
y(also)27 b(presen)m(ted)k(ho)m(w)e(to)f(main)m(tain)e(the)j(c)m(hain)f
(decomp)s(osition)f(and)i(the)f(successor)j(sets)f(when)f(the)g(input)
-116 4386 y(graph)j(is)g(mo)s(di\014ed.)30 4522 y(Agra)m(w)m(al)27
b(et)g(al.)40 b([4])27 b(presen)m(ted)i(another)e(compact)g(represen)m
(tation)h(for)e(materializing)d(the)k(transitiv)m(e)-116
4655 y(closure)34 b(of)g(an)g(acyclic)g(graph.)48 b(This)35
b(represen)m(tation)g(is)f(based)h(on)f(in)m(terv)-5
b(als)33 b(of)h(in)m(tegers.)49 b(A)34 b(successor)-116
4789 y(set)d(is)f(a)g(collection)e(of)i(in)m(terv)-5
b(als)30 b Fm(f)p Fn(I)1231 4804 y Fi(1)1270 4789 y Fn(;)17
b(I)1357 4804 y Fi(2)1396 4789 y Fn(;)g(:)g(:)g(:)f(;)h(I)1658
4804 y Fj(m)1724 4789 y Fm(g)p Fr(,)31 b(where)h(eac)m(h)f(in)m(terv)-5
b(al)29 b Fn(I)36 b Fr(=)27 b(\()p Fn(i;)17 b(j)6 b Fr(\))31
b(represen)m(ts)h(in)m(tegers)-116 4922 y Fn(i;)17 b(i)33
b Fr(+)g(1)p Fn(;)17 b(:)g(:)g(:)f(;)h(j)6 b Fr(.)91
b(A)49 b(successor)i(set)e Fn(S)54 b Fr(can)49 b(t)m(ypically)f(b)s(e)g
(represen)m(ted)k(using)c(only)g(a)g(few)i(in)m(terv)-5
b(als.)-116 5056 y(Th)m(us,)31 b(unioning)26 b(t)m(w)m(o)j(successor)i
(sets,)f(inserting)e(v)m(ertices)h(to)f(successor)j(sets,)f(or)e(c)m
(hec)m(king)i(the)f(presence)-116 5190 y(of)42 b(v)m(ertices)i(in)e
(successor)j(sets)f(is)e(t)m(ypically)g(m)m(uc)m(h)h(faster)g(than)g
(in)f(a)h(successor)i(list)c(represen)m(tation.)-116
5323 y(The)j(w)m(orst-case)g(b)s(ounds)g(for)f(these)i(op)s(erations)d
(are,)k(ho)m(w)m(ev)m(er,)i(the)c(same)f(as)h(in)e(the)i(successor)h
(list)-116 5457 y(represen)m(tation.)d(The)28 b(v)m(ertices)g(can)f(b)s
(e)g(n)m(um)m(b)s(ered)h(in)e(sev)m(eral)i(w)m(a)m(ys)h(and)e
(di\013eren)m(t)g(n)m(um)m(b)s(erings)g(require)-116
5591 y(di\013eren)m(t)43 b(n)m(um)m(b)s(ers)h(of)e(in)m(terv)-5
b(als)42 b(to)g(represen)m(t)j(the)f(successor)h(sets.)75
b(Agra)m(w)m(al)43 b(et)g(al.)73 b(presen)m(ted)45 b(an)-116
5724 y(algorithm)35 b(for)k(computing)e(an)i(optimal)d(n)m(um)m(b)s
(ering)i(under)h(certain)g(conditions.)61 b(They)40 b(also)e(sho)m(w)m
(ed)-116 5858 y(ho)m(w)33 b(to)f(main)m(tain)e(the)j(represen)m(tation)
h(when)f(the)g(input)g(graph)f(is)g(mo)s(di\014ed.)p
eop
33 20 bop 3778 -294 a Fr(33)30 18 y(W)-8 b(e)24 b(discuss)g(b)s(oth)g
(the)f(in)m(terv)-5 b(al)22 b(represen)m(tation)j(and)e(the)h(c)m(hain)
f(represen)m(tation)h(more)f(thoroughly)g(in)-116 152
y(Chapter)29 b(4,)g(where)h(w)m(e)f(presen)m(t)i(another)d(in)m(terv)-5
b(al)27 b(represen)m(tation)i(and)g(another)g(c)m(hain)f(represen)m
(tation,)-116 286 y(whic)m(h)33 b(can)g(b)s(e)f(e\016cien)m(tly)h(used)
h(with)e(cyclic)h(input)f(graphs.)30 419 y(The)38 b(metho)s(ds)e(for)g
(materializing)d(transitiv)m(e)j(closures)h(b)m(y)h(Jagadish)e([67])g
(and)h(Agra)m(w)m(al)f(et)h(al.)55 b([4])-116 553 y(cannot)29
b(b)s(e)g(used)i(for)d(generalized)h(transitiv)m(e)f(closures,)j(since)
e(path)g(information)d(cannot)k(b)s(e)f(asso)s(ciated)-116
686 y(with)41 b(the)i(c)m(hain)e(decomp)s(osition)f(or)i(with)f(in)m
(terv)-5 b(als.)71 b(F)-8 b(ull)40 b(materialization)d(of)42
b(path)g(information)c(is)-116 820 y(infeasible,)29 b(since)i(the)g(n)m
(um)m(b)s(er)f(of)g(p)s(ossible)g(paths)h(gro)m(ws)g(exp)s(onen)m
(tially)e(to)h(the)h(n)m(um)m(b)s(er)g(of)f(v)m(ertices)i(in)-116
954 y(the)h(graph.)30 1087 y(In)40 b(some)g(pap)s(ers,)j(partial)38
b(materialization)d(of)k(path)h(information)d(is)j(studied.)66
b(Agra)m(w)m(al)39 b(and)h(Ja-)-116 1221 y(gadish)26
b([7)o(])h(presen)m(ted)h(a)e(represen)m(tation)h(for)f(partially)e
(materializing)e(path)k(information)d(b)s(et)m(w)m(een)28
b(pairs)-116 1355 y(of)39 b(v)m(ertices.)68 b(The)41
b(represen)m(tation)g(asso)s(ciates)f(to)g(eac)m(h)h(v)m(ertex)h
Fn(v)h Fr(a)d(set)h(of)f(tuples)g(of)f(form)g(\()p Fn(w)s(;)17
b(x;)g(L)p Fr(\),)-116 1488 y(where)31 b Fn(w)h Fr(is)e(a)f(v)m(ertex)j
(that)e(is)f(reac)m(hable)h(from)f Fn(v)t Fr(,)h Fn(x)h
Fr(is)e(the)h(\014rst)h(v)m(ertex)g(in)f(the)g(path)g(leading)e(to)i
Fn(w)s Fr(,)g(and)-116 1622 y Fn(L)35 b Fr(is)g(the)h(lab)s(el)d(asso)s
(ciated)j(to)f(that)g(path.)51 b(Agra)m(w)m(al)35 b(and)g(Jagadish)g
(sho)m(w)m(ed)i(ho)m(w)f(the)g(represen)m(tation)-116
1755 y(is)e(created)h(and)g(main)m(tained)d(when)k(the)f(input)f(graph)
g(is)g(mo)s(di\014ed)f(and)i(ho)m(w)g(path)f(computations)g(can)-116
1889 y(b)s(e)f(e\016cien)m(tly)g(ev)-5 b(aluated)32 b(using)g(the)h
(represen)m(tation.)30 2023 y(Guh)k(et)h(al.)57 b([47,)37
b(48])h(presen)m(ted)h(another)f(represen)m(tation)g(for)f(partially)e
(materializing)e(paths)38 b(b)s(e-)-116 2156 y(t)m(w)m(een)44
b(pairs)e(of)g(v)m(ertices)i(in)e(an)g(acyclic)h(graph.)73
b(This)43 b(represen)m(tation)g(is)f(based)i(on)e(tuples)h(of)f(form)
-116 2290 y(\()p Fn(v)t(;)17 b(w)s(;)g(G)211 2305 y Fj(v)r(w)303
2290 y Fn(;)g(g)394 2305 y Fj(v)r(w)486 2290 y Fr(\),)44
b(where)f Fn(v)j Fr(and)c Fn(w)i Fr(are)e(v)m(ertices)h(connected)h(b)m
(y)e(a)g(path)g Fn(v)2846 2237 y Fl(\003)2814 2290 y
Fm(!)o Fn(w)s Fr(,)i Fn(G)3134 2305 y Fj(v)r(w)3269 2290
y Fr(is)d(the)h(n)m(um)m(b)s(er)-116 2424 y(of)37 b(di\013eren)m(t)h
(paths)g(b)s(et)m(w)m(een)h Fn(v)i Fr(and)d Fn(w)s Fr(,)g(and)g
Fn(g)1705 2439 y Fj(v)r(w)1835 2424 y Fr(is)f Fp(true)h
Fr(i\013)e(\()p Fn(v)t(;)17 b(w)s Fr(\))36 b(is)h(an)h(edge)g(of)f(the)
h(input)f(graph.)-116 2557 y(Asso)s(ciated)i(with)f(eac)m(h)h(v)m
(ertex)i Fn(v)h Fr(are)d(all)d(tuples)j(con)m(taining)f
Fn(v)k Fr(\(either)c(as)h(the)g(source)h(or)e(the)h(target)-116
2691 y(of)f(the)h(path\).)62 b(Guh)38 b(et)h(al.)61 b(presen)m(ted)41
b(b)s(oth)d(sequen)m(tial)h(and)g(parallel)d(algorithms)g(for)i
(creating)g(and)-116 2824 y(managing)30 b(this)i(represen)m(tation.)30
2958 y(The)24 b(dra)m(wbac)m(k)h(of)e(b)s(oth)g(the)h(represen)m
(tation)g(of)e(Agra)m(w)m(al)h(and)g(Jagadish)g([7])g(and)g(the)h
(represen)m(tation)-116 3092 y(b)m(y)36 b(Guh)f(et)g(al.)51
b([47)o(,)36 b(48)o(])f(is)g(their)g(great)g(size.)51
b(The)37 b(represen)m(tation)f(b)m(y)g(Agra)m(w)m(al)e(and)i(Jagadish)e
(needs)-116 3225 y(\012\()p Fn(dn)101 3189 y Fi(2)141
3225 y Fr(\))f(tuples)h(in)f(the)h(w)m(orst)g(case,)h(where)g
Fn(d)f Fr(is)f(the)h(maxim)m(um)d(outdegree)k(of)e(a)g(v)m(ertex.)49
b(This)34 b(kind)f(of)-116 3359 y(memory)j(requiremen)m(t)i(seems)g(to)
f(b)s(e)h(more)f(a)g(rule)g(than)g(an)g(exception)h(in)f(this)g
(represen)m(tation.)59 b(The)-116 3493 y(represen)m(tation)30
b(b)m(y)h(Guh)f(et)g(al.)42 b(needs)31 b(\012\()p Fn(n)1552
3456 y Fi(2)1592 3493 y Fr(\))f(tuples)g(in)g(the)g(w)m(orst)h(case,)g
(but)g(ev)m(en)g(this)f(is)f(to)s(o)g(m)m(uc)m(h)i(if)-116
3626 y Fn(n)e Fr(is)g(large.)41 b(Th)m(us,)31 b(it)d(seems)i(that)f(ev)
m(en)i(partial)c(materialization)d(of)29 b(path)g(information)d(is)i
(not)h(practical)-116 3760 y(when)k(the)g(n)m(um)m(b)s(er)g(of)g(v)m
(ertices)g(is)f(large.)p eop
34 21 bop -116 -294 a Fr(34)p eop end
userdict /end-hook known{end-hook}if
